【发布时间】:2021-01-30 20:12:42
【问题描述】:
我们在 Visual Studio C# 项目中使用 webpack 来捆绑脚本和样式。这些完成的捆绑包 css 和 js 文件最后必须位于不同的文件夹中。为此,我想使用 webpack 中的多编译器。
如果我单独运行配置,它会按预期工作,它会在Content/Styles/dist 文件夹中创建一个styles.css,在Content/Scripts/dist 文件夹中创建一个scripts.js。一旦我想使用多编译器运行这两个配置,就不再创建 scripts.js。
缩短的webpack.config.js 如下所示:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const FixStyleOnlyEntriesPlugin = require('webpack-fix-style-only-entries');
const buildStyles = {
name: 'buildStyles',
entry: {
styles: './Content/Styles/src/styles.scss'
},
output: {
path: path.resolve(__dirname, 'Content/Styles/dist'),
filename: '[name].js'
}
};
const buildScripts = {
name: 'buildScripts',
entry: {
scripts: './Content/Scripts/src/scripts.js'
},
output: {
path: path.resolve(__dirname, 'Content/Scripts/dist'),
filename: '[name].js',
globalObject: 'this'
}
};
const config = {
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules)/,
use: [
{
loader: 'babel-loader',
options: { presets: ['@babel/preset-env'] }
}
]
},
{
test: /\.s?css$/,
use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader: 'file-loader',
options: { name: 'fonts/[name].[ext]' }
}
]
},
{
test: /\.png$/,
use: [
{
loader: 'url-loader',
options: {
name: 'images/[name].[ext]',
mimetype: 'image/png'
}
}
]
},
{
test: /\.svg$/,
use: [
{
loader: 'file-loader',
options: { name: 'images/[name].[ext]' }
}
]
}
]
},
plugins: [
new CleanWebpackPlugin(),
new MiniCssExtractPlugin(),
new FixStyleOnlyEntriesPlugin(),
]
}
module.exports = [{ ...config, ...buildStyles }, { ...config, ...buildScripts }];
运行webpack --config webpack.config.js --mode development 后,我们得到了这个:
> Executing task: npm run dev <
> @projectname@0.0.1 dev C:\Development\PATH
> webpack --config webpack.config.js --mode development
webpack-fix-style-only-entries: removing js from style only module: styles.js
webpack-fix-style-only-entries: removing js from style only module: scripts.js
Hash: a0893d6852ba01de1de9fcbdbd61d1adcdf456cc
Version: webpack 4.44.1
Child buildStyles:
Hash: a0893d6852ba01de1de9
Time: 1834ms
Built at: 2020-10-16 11:14:15
Asset Size Chunks Chunk Names
fonts/OpenSans-Bold.ttf 102 KiB [emitted]
>MANY MORE< XXX KiB [emitted]
styles.css 164 KiB styles [emitted] styles
Entrypoint styles = styles.css
[./Content/Styles/src/styles.scss] 39 bytes {styles} [built]
+ 2 hidden modules
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js!node_modules/sass-loader/dist/cjs.js!Content/Styles/src/styles.scss:
Entrypoint mini-css-extract-plugin = *
[./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./Content/Styles/src/styles.scss] 784 bytes {mini-css-extract-plugin} [built]
+ 30 hidden modules
Child buildScripts:
Hash: fcbdbd61d1adcdf456cc
Time: 2253ms
Built at: 2020-10-16 11:14:15
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Entrypoint scripts =
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[./Content/Scripts/src/scripts.js] 358 bytes {scripts} [built]
[./Content/Scripts/src/utilities/dom-observer.js] 3.72 KiB {scripts} [built]
[./Content/Scripts/src/utilities/dom-ready.js] 662 bytes {scripts} [built]
>MANY MORE<
[./Content/Scripts/src/vendors/polyfill.js] 2.86 KiB {scripts} [built]
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 472 bytes {scripts} [built]
+ 382 hidden modules
带有感叹号的标记位置实际上应该包含以下内容:
Built at: 2020-10-16 11:14:15
Entrypoint scripts = scripts.js
看起来它不再识别多编译模式下的 scripts.js。我是否先运行 buildStyles 然后再运行 buildScripts 并不重要,反之亦然。 我犯了什么错误?我希望有人可以帮助我解决这个问题。
最好的问候
【问题讨论】:
标签: webpack build compilation webpack-4