我有一个应用程序,我正在使用Webpack。在这个应用程序中,我需要将我的source
目录中的各种目录中的一些静态.html文件复制到public
目录中的同一层次结构中。为了做到这一点,我正在使用CopyWebpackPlugin。这时,我的webpack.config.js文件如下所示:
webpack.config.js
const path = require('path');
const projectRoot = path.resolve(__dirname, '../');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: {
app: './source/index.html.js',
},
output: {
path: path.resolve(__dirname, 'public'),
filename: '[name].package.js'
},
module: {
rules: [
{
test: /\.css$/,
loaders: ['style-loader','css-loader']
},
]
},
plugins: [
new CopyWebpackPlugin(
[ { from: './source/**/*.html', to: './public', force:true } ],
{ copyUnmodified: true }
)
]
};
当我从命令行运行webpack
时,一切都按我的意思运行。 HTML文件已成功复制到public
目录中,包括其目录。但是,复制时,将包含源目录名称。例如,如果我的目录结构是这样的:
/source
/dir-1
/child-a
index.html
page.html
/child-b
index.html
contact.html
/dir-2
index.html
我期待CopyWebpackPlugin
的结果输出到以下内容:
预期:
/public
/dir-1
/child-a
index.html
page.html
/child-b
index.html
contact.html
/dir-2
index.html
然而,我实际得到的是:
实际
/public
/source
/dir-1
/child-a
index.html
page.html
/child-b
index.html
contact.html
/dir-2
index.html
请注意source
目录如何包含在复制目标中。我不明白为什么包括这个。更重要的是,我需要删除它。如何从目标路径中删除source
目录?
答案 0 :(得分:8)
您可以使用context param。
new CopyWebpackPlugin(
[{
context: './source/',
from: '**/*.html',
to: './public',
force: true
}], {
copyUnmodified: true
}
)
答案 1 :(得分:1)
我使用了名称变量。
patterns: [
{ from: "src/*.svg", to: '[name].svg'},
]