问题
I would like to bundle my chrome extension with Webpack. The source consists multiple entries and the content of the webpack.config.js
looks as follows:
const path = require("path");
module.exports = {
entry: {
actions: './src/actions/index.js',
options: './src/options/index.js'
},
output: {
filename: '[name].js',
path: path.resolve(__dirname, "dist")
}
};
And folder structure:
The actions/index.js
and options/index.js
files are entries.
My goal is, when the src
get bundled then dist
folder should looks as follows:
How to configure the webpack config to get the desired folder structure above?
Thanks
回答1:
This should solve your problems ;)
file structure
src
├── actions
│ ├── index.html
│ └── index.js
└── options
├── index.html
└── index.js
webpack.config.js
const path = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
actions: './src/actions/index.js',
options: './src/options/index.js'
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name]/index.js'
},
plugins: [
new HtmlWebPackPlugin({
template: './src/actions/index.html',
filename: 'actions/index.html',
chunks: ['actions']
}),
new HtmlWebPackPlugin({
template: './src/options/index.html',
filename: 'options/index.html',
chunks: ['options']
})
]
};
And a more correct version ;)
const path = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');
const ENTRY = {
actions: './src/actions/index.js',
options: './src/options/index.js'
}
const entryHtmlPlugins = Object.keys(ENTRY).map(entryName => {
return new HtmlWebPackPlugin({
template: `./src/${entryName}/index.html`,
filename: `${entryName}/index.html`,
chunks: [entryName]
});
});
module.exports = {
entry: ENTRY,
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name]/index.js'
},
plugins: entryHtmlPlugins
};
I created a branch on github many-outputs
回答2:
You can specify the output path for each entry, this will copy the js
files into the structure you want.
In order to generate html
file for each entry, you can use 2 times HTMLWebpackPlugin
with specifying chunk
option.
Don't forget to put a src/options.html
& src/actions.html
html files as a templates.
const path = require('path');
module.exports = {
entry: {
'actions/index': './src/actions/index.js',
'options/index': './src/options/index.js',
},
output: {
filename: 'index.js',
path: path.resolve(__dirname, 'dist'),
},
plugins: [
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'options.html'),
filename: 'options.html',
chunks: ['options'],
}),
new HtmlWebpackPlugin({
template: path.join(__dirname, 'src', 'actions.html'),
filename: 'actions.html',
chunks: ['actions'],
}),
],
};
来源:https://stackoverflow.com/questions/60589413/how-to-create-multi-output-files