【问题标题】:How Do I Copy an environment.json File To My Output Folder and Use The Output file with Webpack 4?如何将 environment.json 文件复制到我的输出文件夹并在 Webpack 4 中使用输出文件?
【发布时间】:2019-12-06 15:24:56
【问题描述】:

我们有一个具有多个环境的应用程序,并且即将拥有多个供应商。我知道典型的流程是运行webpack --env.NODE_ENV=myenvironment,但是,这很快就会变得非常低效。

最终,我的目标很简单,就是将environment.json 文件复制到输出文件夹并使用它,这样我就可以在 Octopus Deploy 中执行转换,而不必运行多个构建。

换句话说,我想利用一个environment.json 文件在Octopus Deploy 中提供变量替换。这是environment.json 的示例:

{
    "production": false,
    "baseUrl": "http://myapp.com",
    "appId": "MyAppId"
}

现在在 AngularJS 代码中,我正在配置利用这些值的常量:

import * as environment from '../../environment.json';
console.log(environment.baseUrl); // http://myapp.com

angular.module('app')
  .constant('environment', environment);

到目前为止,一切都很好。

问题是,现在如果我修改 dist/environment.json 中的值(注意这是在输出文件夹中),它不会更新值。例如,如果我将baseUrl 的值更改为http://myapp-dev.com,console.log 仍然会打印http://myapp.com

这是我webpack.config.js中的相关代码:

规则

...
{
  test: /\.json$/,
  use: 'json-loader',
  exclude: [/environment\.json$/]
},
... 

插件

...
new CopyWebpackPlugin([{
  from: 'environment.json'
},
...

上述代码成功地将environment.json 文件复制到输出文件夹,但输出文件夹中的其余代码并未使用它。无论出于何种原因,它似乎仍然与 webpack 耦合。

【问题讨论】:

  • Webpack 将在dist 中生成您需要的所有内容(它不会在运行时解析该文件),然后浏览器将加载这些文件,其 js 引擎将在其中执行逻辑。相反,最好询问如何在 js 文件中动态加载 json 配置并使用这些值。

标签: javascript angularjs webpack octopus-deploy


【解决方案1】:

CopyWebpackPlugin 只是复制一个文件——这里什么都没有发生,Webpack 不会在内部使用它。静态 JSON 导入很可能是主包 js 的一部分。

与其尝试动态替换构建的某些部分,不如定义一个external module。这样你就可以灵活地为浏览器环境提供任何你想要的全局变量,并且 webpack 将知道在运行时在哪里找到它们。

【讨论】:

  • 谢谢。我正在探索externals 解决方案。关于 json 在我的主包中的一部分:exclude: [/environment\.json$/] 不应该阻止它捆绑该文件吗?
  • 因为 webpack 2 webpack 会自动处理 json 模块(内部使用 json-loader)。不确定如何禁用或修改该规则。
猜你喜欢
  • 2019-03-02
  • 2019-02-20
  • 1970-01-01
  • 2021-09-16
  • 2015-03-08
  • 1970-01-01
  • 2013-01-25
  • 2022-01-15
  • 2016-04-25
相关资源
最近更新 更多