Webpack - 使用CopyWebpackPlugin将文件从源复制到公共

时间:2017-07-11 14:04:45

标签: webpack copy

我有一个应用程序,我正在使用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目录?

2 个答案:

答案 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'},
]