dev*_*raj 258 node.js npm package.json npm-scripts
如何从内部设置一些环境变量package.json
以与npm start
类似命令一起使用
这是我目前拥有的package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想NODE_ENV
在启动脚本中设置环境变量(例如),同时仍然只能使用一个命令启动应用程序npm start
.
ces*_*sar 349
在脚本命令中设置环境变量:
...
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --reporter spec"
},
...
Run Code Online (Sandbox Code Playgroud)
然后process.env.NODE_ENV
在您的应用中使用.
注意:这仅适用于Mac和Linux.对于Windows,请参阅注释.
Tet*_*Dev 191
只需使用NPM包交叉环境.超级容易.适用于Windows,Linux和所有环境.请注意,您不使用&&移动到下一个任务.您只需设置env然后开始下一个任务.感谢@mikekidder在建议的意见,一个在这里.
来自文档:
{
"scripts": {
"build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果要设置多个全局变量,只需连续声明它们,然后执行命令即可.
最终,执行的命令(使用spawn)是:
webpack --config build/webpack.config.js
Run Code Online (Sandbox Code Playgroud)
该NODE_ENV
环境变量将通过交ENV被设置
Tee*_*muK 35
我只想在这里为未来的Node-explorers添加两分钱.在我的Ubuntu 14.04上NODE_ENV=test
没有用,我不得不使用export NODE_ENV=test
之后NODE_ENV=test
开始工作,很奇怪.
在Windows上已经说过你必须使用set NODE_ENV=test
但是对于跨平台的解决方案,交叉env库似乎没有做到这一点,你真的需要一个库来做到这一点:
export NODE_ENV=test || set NODE_ENV=test&& yadda yadda
Run Code Online (Sandbox Code Playgroud)
需要垂直条,否则Windows将在无法识别的export NODE_ENV
命令上崩溃:D.关于尾随空间的Dunno,但也确定我也删除了它们.
Luk*_*uke 20
因为我经常发现自己使用多个环境变量,所以发现将它们保存在单独的.env
文件中很有用(请确保从源代码管理中忽略它)。
VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break
Run Code Online (Sandbox Code Playgroud)
然后export $(cat .env | xargs) &&
在脚本命令之前添加。
例:
VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break
Run Code Online (Sandbox Code Playgroud)
为了进行测试,您可以通过运行npm run env
(linux)或npm run env-windows
(windows)查看env变量。
kar*_*agi 15
当NODE_ENV
环境变量设置为“生产”时package.json
,运行 npm install 时文件中的所有 devDependency 将被完全忽略。您还可以使用标志来强制执行此操作--production
:
npm install --production
Run Code Online (Sandbox Code Playgroud)
对于设置,NODE_ENV
您可以使用以下任何一种方法
方法1NODE_ENV
:为所有节点应用程序设置
Windows
:
set NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)
Linux, macOS or other unix
基于系统:
export NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)
这会为当前 bash 会话设置 NODE_ENV,因此在此语句之后启动的任何应用程序都会将 NODE_ENV 设置为生产环境。
方法2NODE_ENV
:为当前应用程序设置
NODE_ENV=production node app.js
Run Code Online (Sandbox Code Playgroud)
这将NODE_ENV
仅针对当前应用程序进行设置。当我们想要在不同的环境中测试我们的应用程序时,这会很有帮助。
方法3:创建.env
文件并使用它
这使用了这里解释的想法。请参阅这篇文章以获得更详细的解释。
基本上,您创建一个 .env 文件并运行一些 bash 脚本以在环境中设置它们。
为了避免编写 bash 脚本,可以使用 env-cmd 包加载 .env 文件中定义的环境变量。
env-cmd .env node app.js
Run Code Online (Sandbox Code Playgroud)
方法4:使用cross-env package
该包允许以一种方式为每个平台设置环境变量。
使用 npm 安装后,您只需将其添加到 package.json 中的部署脚本中即可,如下所示:
"build:deploy": "cross-env NODE_ENV=production webpack"
Run Code Online (Sandbox Code Playgroud)
小智 11
对于单个环境变量
"scripts": {
"start": "set NODE_ENV=production&& node server.js"
}
Run Code Online (Sandbox Code Playgroud)
对于多个环境变量
"scripts": {
"start": "set NODE_ENV=production&& set PORT=8000&& node server.js"
}
Run Code Online (Sandbox Code Playgroud)
小智 10
通过替换在Windows上尝试以下操作YOURENV
:
{
...
"scripts": {
"help": "set NODE_ENV=YOURENV && tagove help",
"start": "set NODE_ENV=YOURENV && tagove start"
}
...
}
Run Code Online (Sandbox Code Playgroud)
这将在Windows 控制台中工作:
"scripts": {
"setAndStart": "set TMP=test&& node index.js",
"otherScriptCmd": "echo %TMP%"
}
Run Code Online (Sandbox Code Playgroud)
npm run aaa
输出:
test
有关详细信息,请参阅此答案。
@luke 的回答几乎是我需要的!谢谢。
由于所选答案非常简单(且正确),但很旧,我想提供一种替代方法,用于在运行脚本时从 .env 单独文件导入变量并修复 Luke 的答案的一些限制。尝试这个:
::: .env 文件 :::
# This way, you CAN use comments in your .env files
NODE_PATH="src/"
# You can also have extra/empty lines in it
SASS_PATH="node_modules:src/styles"
Run Code Online (Sandbox Code Playgroud)
然后,在您的包 json 中,您将创建一个脚本,该脚本将设置变量并在您需要它们的脚本之前运行它:
::: package.json :::
scripts: {
"set-env": "export $(cat .env | grep \"^[^#;]\" |xargs)",
"storybook": "npm run set-env && start-storybook -s public"
}
Run Code Online (Sandbox Code Playgroud)
grep'ed cat 命令中的正则表达式将清除注释和空行。
在&&
不需要被“粘”到npm run set-env
,因为它会如果你在同一个命令设置的变量是必需的。
如果您正在使用纱线,您可能会看到警告,您可以将其更改为yarn set-env
或npm run set-env --scripts-prepend-node-path &&
改用。
使用它的另一个优点是您可以拥有不同的环境变量。
scripts: {
"set-env:production": "export $(cat .production.env | grep \"^[^#;]\" |xargs)",
"set-env:development": "export $(cat .env | grep \"^[^#;]\" |xargs)",
}
Run Code Online (Sandbox Code Playgroud)
请记住,当您有密钥、密码或敏感/个人数据时,不要将 .env 文件添加到您的 git 存储库中!
对于更大的环境变量集或当您想重用它们时,您可以使用env-cmd
.
./.env
文件:
# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH
Run Code Online (Sandbox Code Playgroud)
./package.json
:
{
"scripts": {
"test": "env-cmd mocha -R spec"
}
}
Run Code Online (Sandbox Code Playgroud)
使用多个环境变量从 package.json 运行 node.js 脚本:
"scripts": {
"do-nothing": "set NODE_ENV=prod4 && set LOCAL_RUN=true && node ./x.js",
},
Run Code Online (Sandbox Code Playgroud)
x.js 文件可以是:
let env = process.env.NODE_ENV;
let isLocal = process.env.LOCAL_RUN;
console.log("ENV" , env);
console.log("isLocal", isLocal);
Run Code Online (Sandbox Code Playgroud)
突然我发现actionhero正在使用以下代码,它通过传入--NODE_ENV=production
启动脚本命令选项解决了我的问题.
if(argv['NODE_ENV'] != null){
api.env = argv['NODE_ENV'];
} else if(process.env.NODE_ENV != null){
api.env = process.env.NODE_ENV;
}
Run Code Online (Sandbox Code Playgroud)
我真的很感激接受其他人的回答,他们知道更好的方法在package.json或init脚本中设置环境变量,或者其他类似的东西,其中app由其他人引导.
npm(和 yarn)将大量来自 package.json 的数据作为环境变量传递到脚本中。使用npm run env
一饱眼福。这是在记录https://docs.npmjs.com/misc/scripts#environment而不仅是像“生命周期”的脚本prepublish
,但也执行任何脚本npm run
。
您可以访问这些内部代码(例如process.env.npm_package_config_port
在 JS 中),但它们已经可用于运行脚本的 shell,因此您也可以将它们作为$npm_...
“脚本”中的扩展访问(unix 语法,可能不适用于 Windows?)。
在“配置”部分,似乎用于这一用途:
"name": "myproject",
...
"config": {
"port": "8010"
},
"scripts": {
"start": "node server.js $npm_package_config_port",
"test": "wait-on http://localhost:$npm_package_config_port/ && node test.js http://localhost:$npm_package_config_port/"
}
Run Code Online (Sandbox Code Playgroud)
这些“配置”字段的一个重要特性是用户可以在不修改 package.json 的情况下覆盖它们!
$ npm run start
> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port
Serving on localhost:8010
$ npm config set myproject:port 8020
$ git diff package.json # no change!
$ cat ~/.npmrc
myproject:port=8020
$ npm run start
> myproject@0.0.0 start /home/cben/mydir
> node server.js $npm_package_config_port
Serving on localhost:8020
Run Code Online (Sandbox Code Playgroud)
请参阅npm config和yarn config文档。
看来,纱读~/.npmrc
这样npm config set
既影响,但yarn config set
写入~/.yarnrc
,所以只有纱会看到它:-(
在 Windows 中使用 git bash。Git Bash 处理命令的方式与 cmd 不同。
当您像这样使用 NODE_ENV=production 设置环境变量时,大多数 Windows 命令提示符都会卡住。(Windows 上的 Bash 除外,它使用本机 Bash。)同样,Windows 和 POSIX 命令使用环境变量的方式也有所不同。在 POSIX 中,您使用:$ENV_VAR,而在 Windows 上,您使用 %ENV_VAR%。- 跨环境文档
{
...
"scripts": {
"help": "tagove help",
"start": "env NODE_ENV=production tagove start"
}
...
}
Run Code Online (Sandbox Code Playgroud)
使用 dotenv 包来声明 env 变量
{
...
"scripts": {
"start": "ENV NODE_ENV=production someapp --options"
}
...
}
Run Code Online (Sandbox Code Playgroud)
最优雅和便携的解决方案
package.json
::
"scripts": {
"serve": "export NODE_PRESERVE_SYMLINKS_MAIN=1 && vue-cli-service serve"
},
Run Code Online (Sandbox Code Playgroud)
windows
在创建下export.cmd
并将其放在您的某处%PATH%
:
@echo off
set %*
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
327131 次 |
最近记录: |