You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js:如何向构建流程及应用服务端传递参数?

Got it, let's walk through how to pass parameters to your server-side build and runtime based on your current setup. Here are three practical approaches tailored to your config:

1. Extend Environment Variables (Quick & Simple)

You’re already using environment variables with TEST=MYTEST, so extending this is straightforward.

First, if you want to pass a parameter via npm’s config flags, update your betterScripts in package.json to map a custom npm config to an env var:

"betterScripts": {
  "build": {
    "command": "webpack -p --config webpack.config.production.js",
    "env": {
      "TEST": "MYTEST",
      "SERVER_PARAM": "$npm_config_serverparam"
    }
  }
}

Then run your build with:

npm run build --serverparam=my_custom_value

To access this in your server code (src/server/index.js) or webpack config, just use process.env.SERVER_PARAM.

Alternatively, you can pass temp env vars directly in the command line without modifying package.json:

TEST=MYTEST SERVER_PARAM=direct_value npm run build

2. Use Webpack’s --env Flag (Build-Time Integration)

If you need the parameter to influence your webpack build process (like changing entry points or plugins), use webpack’s built-in environment argument support.

First, update your betterScripts command to pass the env param:

"betterScripts": {
  "build": {
    "command": "webpack -p --config webpack.config.production.js --env.serverparam=$npm_config_serverparam",
    "env": {
      "TEST": "MYTEST"
    }
  }
}

Then, rewrite your webpack.config.production.js as a function that accepts the env object:

const path = require('path');
const webpack = require('webpack');

module.exports = (env) => {
  // Grab the parameter, with a default if not provided
  const serverParam = env?.serverparam || 'default_server_value';

  return {
    entry: ['babel-polyfill', './src/server/index.js'],
    target: 'node',
    output: {
      path: path.resolve(__dirname, 'dist'),
      filename: 'server.bundle.js'
    },
    plugins: [
      // Make the param available in your server code
      new webpack.DefinePlugin({
        'process.env.SERVER_PARAM': JSON.stringify(serverParam)
      })
    ],
    // Rest of your config...
  };
};

Run the build the same way as before:

npm run build --serverparam=build_specific_value

Now process.env.SERVER_PARAM will be available in your server bundle.

3. Runtime Parameters (Dynamic Post-Build)

If you don’t need the parameter during the build, but want to pass it when running the server bundle, skip modifying the build entirely. Just run the bundled server with arguments:

node dist/server.bundle.js --serverparam=runtime_value

Then in src/server/index.js, parse the arguments (using minimist for simplicity, or vanilla process.argv):

// First install minimist if you don't have it: npm install minimist --save
const minimist = require('minimist');
const args = minimist(process.argv.slice(2));

const serverParam = args.serverparam || 'default_runtime_value';
// Use the param in your server logic

Pick the approach that fits your use case: env vars for static build-time values, webpack --env for build-config changes, or runtime args for dynamic, post-build adjustments.

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:33:43