如何在Webpack编译期间禁止替换process.env变量?

时间:2018-12-16 11:39:15

标签: node.js typescript webpack aws-lambda webpack-4

故事

我正在开发AWS Lambda函数,并使用webpack编译代码。

我已经阅读了一些文章,似乎process.env变量在编译过程中被自动替换了。虽然很酷,但我还是想禁止这种行为。

为什么?

因为我正在使用AWS Lambda仪表板传递环境变量。

Webpack配置

const nodeExternals = require('webpack-node-externals')
const webpack = require('webpack')
const path = require('path')

module.exports = {
  target: 'node',
  entry: path.resolve(__dirname, 'index.ts'),
  externals: [nodeExternals()],
  devtool: 'inline-source-map',
  mode: 'production',
  module: {
    rules: [{
      test: /\.tsx?$/,
      use: [{
        loader: 'ts-loader',
        options: {
          experimentalWatchApi: true,
        },
      }],
    }]
  },
  plugins: [],
  resolve: {
    extensions: ['.tsx', '.ts', '.js']
  },
  output: {
    filename: 'index.js',
    libraryTarget: 'commonjs',
    path: path.resolve(__dirname, 'dist')
  }
}

问题

process.env编译期间是否可以禁止替换webpack变量的行为? 如果是,请帮助我达到此效果。

3 个答案:

答案 0 :(得分:1)

通过Webpack配置中的

mode option,可以替换process.env.NODE_ENV

  

发展

     

在DefinePlugin上设置process.env.NODE_ENV以进行价值开发。   启用NamedChunksPlugin和NamedModulesPlugin。

     

生产

     

在DefinePlugin上将process.env.NODE_ENV设置为值生产。启用   FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,   ModuleConcatenationPlugin,NoEmitOnErrorsPlugin,   OccurrenceOrderPlugin,SideEffectsFlagPlugin和TerserPlugin。

     

     

退出任何默认优化选项

webpack -p CLI option也是如此。

如果DefinePluginprocess.env.NODE_ENV的影响不理想,则列出的插件应在没有DefinePlugin的情况下应用,如文档production和{{3 }}模式。

答案 1 :(得分:0)

我可以通过添加以下内容来避免在vue.config.js中出现此行为:

const Config = require('webpack-chain');
const config = new Config();
module.exports = {
  chainWebpack: config => {
    config.plugins.delete("define")
  },
  configureWebpack: {
  ...,
  },
  .....
}

答案 2 :(得分:0)

TextWatcher sumCalculator = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!TextUtils.isEmpty(tipCash.getText().toString().trim()) || !TextUtils.isEmpty(tipCard.getText().toString().trim())) { try { int cashValue = TextUtils.isEmpty(tipCash.getText()) ? 0 : Integer.parseInt(tipCash.getText().toString().trim()); int cardValue = TextUtils.isEmpty(tipCard.getText()) ? 0 : Integer.parseInt(tipCard.getText().toString().trim()); int sumValue = cashValue + cardValue; tipSum.setText(String.valueOf(sumValue)); }catch (NumberFormatException e ){} Toast.makeText(getActivity(),"Too big number",Toast.LENGTH_SHORT).show(); tipSum.setText("sum"); } else { tipSum.setText("sum"); } } @Override public void afterTextChanged(Editable s) { } }; tipCash.addTextChangedListener(sumCalculator); tipCard.addTextChangedListener(sumCalculator); 设置为optimization.nodeEnv

发件人:

https://webpack.js.org/configuration/optimization/#optimizationnodeenv

optimization.nodeEnv

布尔值=假字符串

告诉webpack将process.env.NODE_ENV设置为给定的字符串值。 Optimization.nodeEnv>除非设置为false,否则使用DefinePlugin。如果设置了optimization.nodeEnv,则默认将其设置为mode,否则返回到“ production”。