我对表达+ webpack相对较新,因此我不清楚是否打算这样做,以及是否正确配置它。问题在于使用mini-css-extract-plugin时创建的附加资产和入口点。
Webpack配置:
Extract = require('mini-css-extract-plugin');
path = require('path');
Write = require('write-file-webpack-plugin');
module.exports = {
mode: 'development',
entry: {
demo_scripts: path.resolve('server', 'scripts', 'demo.js'),
demo_styles: path.resolve('server', 'styles', 'demo.css')
},
output: {
path: path.resolve('.tmp'),
filename: '[name].js'
},
plugins: [new Write(), new Extract()],
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['babel-preset-env']
}
}
]
},
{
test: /\.css/,
use: [
{
loader: Extract.loader
},
{
loader: 'css-loader'
}
]
}
]
}
};
Webpack输出
Asset Size Chunks Chunk Names
demo_scripts.js 3.91 KiB demo_scripts [emitted] demo_scripts
demo_styles.css 36 bytes demo_styles [emitted] demo_styles
demo_styles.js 3.89 KiB demo_styles [emitted] demo_styles
Entrypoint demo_scripts = demo_scripts.js
Entrypoint demo_styles = demo_styles.css demo_styles.js
我的问题是,为什么创建demo_styles.js
?尽管正在提取css,但似乎webpack仍在使用css创建捆绑的js,但是当我查看该文件时,其中的唯一一行是
eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./server/styles/demo.css?");
有人可以帮忙解释一下这里发生了什么吗?
更新
如果我删除demo_styles入口点,并通过插件init对其进行配置,则不会构建CSS资源。
({
plugins: [
new Write(),
new Extract({
filename: 'demo_styles.css'
})
]
});
Asset Size Chunks Chunk Names
demo_scripts.js 3.91 KiB demo_scripts [emitted] demo_scripts
Entrypoint demo_scripts = demo_scripts.js
此处的存储库(请注意快递分支)https://github.com/brewster1134/bumper/tree/express
答案 0 :(得分:0)
请从您创建demo_styles
的入口点中删除demo_styles.js
。
相反,您可以像这样注入css文件:
plugins: [
new MiniCssExtractPlugin({
filename: 'demo_styles.css',
}),
让我知道问题是否仍然存在,很高兴为您提供帮助
答案 1 :(得分:-1)
有两种解决方法来解决您的问题。对于两者,您都需要更改Webpack配置文件的entry
点。我个人更喜欢第一种选择。
选项1:
将entry
更改为以下内容:
entry: {
demo: [
path.resolve('server', 'scripts', 'demo.js'),
path.resolve('server', 'styles', 'demo.css'),
]
}
这将生成以下输出(基于您为Extract
类和output
部分提供的文件名:
选项2:
对于此选项,您需要从entry
点删除CSS文件并将其导入JS文件中:
webpack.config.js
...
entry: path.resolve('server', 'scripts', 'demo.js'),
...
demo.js
import './../styles.demo.css'
//rest of your JS codes
此解决方案将生成与Option1
相同的输出