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

如何在npm scripts中使用package.json的npm config变量简化重复node参数

解决方案汇总

方案1:通过NODE_OPTIONS环境变量统一注入参数(最推荐)

Node运行时会自动读取NODE_OPTIONS环境变量中的全局参数,所有调用Node的场景都会自动生效,无需每个脚本重复声明。
推荐配合cross-env包实现跨平台兼容(Windows/类Unix系统都支持):

  1. 先安装依赖:
npm i cross-env -D
  1. 配置package.json:
{
  "scripts": {
    "node:base": "cross-env NODE_OPTIONS=\"--use_strict -r dotenv/config --experimental-vm-modules\"",
    "test": "npm run node:base -- jest",
    "testwatch": "npm run node:base -- jest --watchAll",
    "start": "npm run node:base -- node ./src/index"
  }
}

脚本中--后面的内容会作为参数传递给前置的基础命令,参数会自动拼接生效。

方案2:通过npm内置变量复用公共参数

npm支持在package.json的config字段定义自定义变量,在scripts中可以直接引用:

{
  "config": {
    "nodeCommonArgs": "--use_strict -r dotenv/config --experimental-vm-modules"
  },
  "scripts": {
    "test": "node $npm_package_config_nodeCommonArgs node_modules/.bin/jest",
    "testwatch": "node $npm_package_config_nodeCommonArgs node_modules/.bin/jest --watchAll",
    "start": "node $npm_package_config_nodeCommonArgs ./src/index"
  }
}

注意:该方案在Windows cmd环境下不支持$变量语法,需要在WSL、Git Bash或者配合cross-env使用。

方案3:封装公共执行脚本

可以把公共的Node启动逻辑封装为独立的shell脚本,进一步简化配置:

  1. 项目根目录新建run.sh(类Unix系统)内容如下:
#!/bin/bash
node --use_strict -r dotenv/config --experimental-vm-modules "$@"
  1. 给脚本添加执行权限:
chmod +x run.sh
  1. 配置package.json scripts:
{
  "scripts": {
    "test": "./run.sh node_modules/.bin/jest",
    "testwatch": "./run.sh node_modules/.bin/jest --watchAll",
    "start": "./run.sh ./src/index"
  }
}

Windows系统可以对应写run.cmd批处理脚本实现相同逻辑。

额外优化建议

部分参数可以下沉到对应工具的配置文件中,进一步减少Node启动参数:

  • 针对jest的--experimental-vm-modules参数,jest 28+版本支持在jest.config.js中配置experimentalVmModules: true实现相同效果
  • dotenv的加载逻辑可以写到入口文件顶部第一行require('dotenv').config(),无需通过-r参数加载

内容的提问来源于stack exchange,提问作者cj-2307

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:04