Multiple entry points with glob pattern / Partial files with underscore / Preserve directory structure
npm install @sect/webpack-sweet-entryMultiple entry points with glob pattern / Ignore files and directories with leading underscore _ / Preserve directory structure
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
$3
`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: {
...
}
}
];
`$3
`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: {
...
}
}
];
`$3
`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;
`$3
`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'
}
`
$3
`
.
├── 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
$3
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$3
This project uses 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 changesetPreview version bump (without publishing)
npm run version-packagesBuild and test before release
npm run build
npm test
npm run lint
``See CHANGELOG file.
✌️
A little project by @sectsect