通过使用转换文件webpack-copy-plugin
并不是处理资产的正确方法。它更像是骇客/反模式方式。相反,您应该依赖适当的加载器管道。Webpack 加载器是专门为处理这个任务而设计的。你需要 4 件事来完成你的任务。
- 要处理 SASS/SCSS 文件,您应该使用
sass-loader
.
- 使用
css-loade
r 将 CSS 转换为 CommonJS 格式。
- 增强您的配置,
mini-css-extract-plugin
将 JS 代码中的 CSS 提取到实际的 CSS 文件中。
- 使用对象语法单独指定您的 SASS 目标文件。这是在 dist 文件夹中保留文件夹结构的关键。entry 对象的键就像 dist/dest 中的文件夹结构。(见下文)
您的配置如下所示:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
output: {
// Whatever name pattern you need.
filename: `[name]/bundle-[contenthash].js`,
path: path.resolve(__dirname, 'dest')
},
entry: {
'folder1': './src/folder1/test1.scss',
'folder2': './src/folder2/test2.scss',
'folder2/folder3': './src/folder2/folder3/test3.scss'
},
modules: {
rules: [
{
test: /\.(sa|sc|c)ss$/,
use: [
// Mark content for extraction into seperate CSS file
MiniCssExtractPlugin.loader,
// Translates CSS into CommonJS
'css-loader',
// Compiles Sass to CSS
'sass-loader'
]
}
]
},
plugins: [
// Run the actual plugin to extract CSS into separate CSS files
new MiniCssExtractPlugin({
// Whatever name pattern you need
filename: `[name].css`
})
]
};
filename
用你需要的模式调整你的。
或者,如果您希望坚持相同的方法,则to
复制插件配置的参数接受 webpack 样式的输出模式。类似的东西可以为你工作:
// You can use .css instead of [ext]
to: '[path][name].[contenthash].[ext]'
最后,作为最后一个选项,如果 SASS 文件太多,那么您可以使用glob 包entry
动态构造 Webpack对象,然后在模块配置中使用它。