使用webpack替换复制文件

时间:2017-07-31 22:09:15

标签: ionic-framework webpack

我有一个build.config.xml,其中有几个字符串,如$FABRIC_API_KEY。我想将process.env.FABRIC_API_KEY替换为新文件config.xmlbuild.config.xml应保持不变)。我尝试过使用CopyWebpackPlugin,但我似乎无法做到这一点。

var CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
  ...    
  resolve: {
    extensions: ['.ts', '.js', '.json', '.xml'],
    ...

  plugins: [
    ionicWebpackFactory.getIonicEnvironmentPlugin(),
    new CopyWebpackPlugin([{
      from: 'build.config.xml',
      to: 'config.xml',
      transform: function (content) {
        content = content
          .replace('$FABRIC_API_SECRET', process.env.FABRIC_API_SECRET)
          .replace('$FABRIC_API_KEY', process.env.FABRIC_API_KEY);

        return content;
      },
    }]),
  ],
};

该文件执行其他操作(构建离子),其他所有内容都按预期工作。没有错误或任何内容,config.xml无法创建。

如何复制文件并替换其中的字符串?我愿意使用另一个插件。

2 个答案:

答案 0 :(得分:1)

尝试使用xml-webpack-plugin。我希望这能帮到你。

<强> webpack.config.js

var XMLWebpackPlugin = require('xml-webpack-plugin')

var xmlFiles = [
    {
        template: path.join(__dirname, 'browserconfig.ejs'),
        filename: 'browserconfig.xml',
        data: {
            square70x70logo: 'images/icon70.png',
            square150x150logo: 'images/icon150.png',
            wide310x150logo: 'images/icon310x150.png',
            square310x310logo: 'images/icon310.png',
            tileColor: '#ffffff'
        }
    }
]

<强> browserconfig.ejs

<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
    <msapplication>
        <tile>
            <square70x70logo src="<%= square70x70logo %>"/>
            <square150x150logo src="<%= square150x150logo %>"/>
            <wide310x150logo src="<%= wide310x150logo %>"/>
            <square310x310logo src="<%= square310x310logo %>"/>
            <TileColor><%= tileColor %></TileColor>
        </tile>
    </msapplication>
</browserconfig>

答案 1 :(得分:1)

自OP以来,可能发生了许多变化,但是copy-webpack-plugintransform功能确实允许修改文件内容。 尽管传递给该函数的content参数是一个 buffer ,所以可以像这样实现简单的字符串替换(注意对toString()的调用):

new CopyWebpackPlugin([{
  from: 'build.config.xml',
  to: 'config.xml',
  transform(content) {
    return content
      .toString()
      .replace('$FABRIC_API_SECRET', process.env.FABRIC_API_SECRET)
      .replace('$FABRIC_API_KEY', process.env.FABRIC_API_KEY);
  },
}])