如何跨平台 (win/linux) 使用 NPM 配置变量?

Nic*_*cky 9 javascript node.js npm

使用时的npm_package_config_<variable>用法因操作系统而异。

package.json(Linux 和 Windows)

config: {
    foo: "bar"
}
Run Code Online (Sandbox Code Playgroud)

然后用于使用:

Linux

node app.js --arg=$npm_package_config_foo
Run Code Online (Sandbox Code Playgroud)

视窗

node app.js --arg=%npm_package_config_foo%
Run Code Online (Sandbox Code Playgroud)

因此,我创建了 2 个单独的scriptspackage.json但这感觉很麻烦。

有什么办法可以跨平台吗?

PS我知道cross-env插件,但这不适用于上述情况,仅适用于NODE_ENV。

更新

为了避免对上下文的误解,这是我正在寻找的一个真实案例场景,将其用于 Docker 命令以指定端口号:

包.json

"config": {
    "port": "3000"
}
...
"scripts": {
    "docker:build": "docker build --build-arg PORT=$npm_package_config_port -t my-app .",
    "docker:build:win": "docker build --build-arg PORT=%npm_package_config_port% -t my-app .",
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*oon 10

你应该使用cross-var.

然后你可以简化为:

"scripts": { "docker:build": "cross-var docker build --build-arg PORT=$npm_package_config_port -t my-app .", }

  • 我担心的是与“cross-var”引入的软件包数量有关。134 实际上,简单功能的依赖关系如此之多[依赖关系图](http://npm.anvaka.com/#/view/2d/cross-var) (2认同)
  • 也许带有 [10 个依赖项](http://npm.anvaka.com/#/view/2d/cross-var-no-babel) 的 `cross-var-no-babel` 而不是带有 134 个依赖项的 `cross-var` (2认同)