https://github.com/sectsect/webpack-sweet-entry
📦 webpack: Multiple entry points with glob pattern - Partial files named with a leading underscore - Preserve directory structure in dist directory
https://github.com/sectsect/webpack-sweet-entry
dynamic entrypoints es6 glob modules partial partial-files rspack typescript webpack webpack5 wildcards
Last synced: 2 days ago
JSON representation
📦 webpack: Multiple entry points with glob pattern - Partial files named with a leading underscore - Preserve directory structure in dist directory
- Host: GitHub
- URL: https://github.com/sectsect/webpack-sweet-entry
- Owner: sectsect
- License: mit
- Created: 2017-12-14T18:31:33.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-12-13T09:40:43.000Z (4 months ago)
- Last Synced: 2026-01-30T12:40:05.719Z (2 months ago)
- Topics: dynamic, entrypoints, es6, glob, modules, partial, partial-files, rspack, typescript, webpack, webpack5, wildcards
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@sect/webpack-sweet-entry
- Size: 1.84 MB
- Stars: 20
- Watchers: 3
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @sect/webpack-sweet-entry
[](https://github.com/sectsect/webpack-sweet-entry/actions/workflows/release.yml) [](https://codecov.io/gh/sectsect/webpack-sweet-entry) [](https://github.com/sectsect/webpack-sweet-entry/actions/workflows/github-code-scanning/codeql)
Multiple entry points with glob pattern / Ignore files and directories with leading underscore `_` / Preserve directory structure
## Install
```
npm install --save-dev @sect/webpack-sweet-entry
```
## Features
- Multiple entry points with glob pattern.
- Ignore files and directories with leading underscore `_`.
- Preserve directory structure in `dist` directory.
- Dual Package Support (CommonJS and ES Modules).
## Usage Example
### CommonJS
```js
const webpack = require('webpack');
const path = require('path');
const { WebpackSweetEntry } = require('@sect/webpack-sweet-entry');
const sourcePath = path.join(__dirname, 'src');
const buildPath = path.join(__dirname, 'dist');
module.exports = [
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/js/**/*.js*'), 'js', 'js'),
output: {
path: path.resolve(buildPath, 'assets/js'),
filename: '[name].js',
},
module: {
...
}
},
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/css/**/*.css'), 'css', 'css'),
output: {
path: path.resolve(buildPath, 'assets/css'),
filename: '[name].css',
},
module: {
...
}
}
];
```
### ES Modules
```js
import webpack from 'webpack';
import path from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import { WebpackSweetEntry } from '@sect/webpack-sweet-entry';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const sourcePath = path.join(__dirname, 'src');
const buildPath = path.join(__dirname, 'dist');
export default [
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/js/**/*.js*'), 'js', 'js'),
output: {
path: path.resolve(buildPath, 'assets/js'),
filename: '[name].js',
},
module: {
...
}
},
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/css/**/*.css'), 'css', 'css'),
output: {
path: path.resolve(buildPath, 'assets/css'),
filename: '[name].css',
},
module: {
...
}
}
];
```
### TypeScript
```ts
import webpack from 'webpack';
import path from 'path';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import { WebpackSweetEntry } from '@sect/webpack-sweet-entry';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const sourcePath = path.join(__dirname, 'src');
const buildPath = path.join(__dirname, 'dist');
const config: webpack.Configuration[] = [
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/js/**/*.js*'), 'js', 'js'),
output: {
path: path.resolve(buildPath, 'assets/js'),
filename: '[name].js',
},
module: {
...
}
},
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/css/**/*.css'), 'css', 'css'),
output: {
path: path.resolve(buildPath, 'assets/css'),
filename: '[name].css',
},
module: {
...
}
}
];
export default config;
```
### Multiple(Mixed) extensions
```ts
const config: webpack.Configuration[] = [
{
entry: WebpackSweetEntry(path.resolve(sourcePath, 'assets/scripts/**/*.*s*'), ['ts', 'js'], 'scripts'),
output: {
...
},
module: {
...
}
},
...
];
```
## API
```js
WebpackSweetEntry(path, ext, parentdir);
```
| arg | type | Description | Example |
| ---- | ---- | ----------- | ------- |
| path | `string` \| `string[]` | File path glob(s) | `path.resolve(sourcePath, 'assets/js/**/*.js*')` or `[path.resolve(sourcePath, 'assets/js/**/*.js*'), '!**/a.js']` |
| ext | `string` \| `string[]` | File extension | `js` or `['ts', 'js']`
| parentdir | `string` | Parent Dirctory Name for files (The directory name where the tree starts) | `js` |
Returns `object` like the following.
```js
{
a: '/path/to/your/src/assets/js/a.js',
b: '/path/to/your/src/assets/js/b.js',
'dir/e': '/path/to/your/src/assets/js/dir/e.js'
}
{
a: '/path/to/your/src/assets/css/a.css',
b: '/path/to/your/src/assets/css/b.css',
'dir/e': '/path/to/your/src/assets/css/dir/e.css'
}
```
### Build Result
```
.
├── dist
│ └── assets
│ ├── css
│ │ ├── a.css
│ │ ├── b.css
│ │ └── dir
│ │ └── e.css
│ └── js
│ ├── a.js
│ ├── b.js
│ └── dir
│ └── e.js
├── src
│ └── assets
│ ├── css
│ │ ├── a.css
│ │ ├── b.css
│ │ ├── _c.css
│ │ ├── _d.css
│ │ └── dir
│ │ ├── e.css
│ │ └── _f.css
│ └── js
│ ├── a.js
│ ├── b.js
│ ├── _c.js
│ ├── _d.js
│ ├── _modules
│ │ ├── a.js
│ │ └── b.js
│ └── dir
│ ├── e.js
│ └── _f.js
├── package-lock.json
├── package.json
└── webpack.config.js
```
## Migrate from v1
```
$ npm uninstall webpack-sweet-entry
$ npm install --save-dev @sect/webpack-sweet-entry
```
```diff
- const WebpackSweetEntry = require('webpack-sweet-entry');
+ const { WebpackSweetEntry } = require('@sect/webpack-sweet-entry');
```
## Development
### Making Changes
When you make a change that should be included in the next release:
1. Create a feature branch
2. Make your changes
3. Add a changeset: `npm run changeset`
- Select the type of change (patch/minor/major)
- Provide a description of the change
4. Commit the changeset file along with your changes
5. Create a pull request
### Release Process
This project uses [changesets](https://github.com/changesets/changesets) for version management and releases.
**Automated Release Workflow:**
1. When a PR with changesets is merged to master, a "Version Packages" PR is automatically created
2. The Version Packages PR includes:
- Updated version numbers in package.json
- Updated CHANGELOG.md
- Removed changeset files
3. When the Version Packages PR is merged:
- The package is automatically built
- Published to npm with provenance
- A GitHub release is created
**Manual Testing:**
```bash
# Create a test changeset
npm run changeset
# Preview version bump (without publishing)
npm run version-packages
# Build and test before release
npm run build
npm test
npm run lint
```
## Changelog
See [CHANGELOG](https://github.com/sectsect/webpack-sweet-entry/blob/master/CHANGELOG.md) file.
✌️
A little project by @sectsect