如何从包中设置一些环境变量。Json使用NPM启动像命令?
以下是我目前在package.json中的内容:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想在启动脚本中设置环境变量(如NODE_ENV),同时仍然能够用一个命令启动应用程序,npm start。
如何从包中设置一些环境变量。Json使用NPM启动像命令?
以下是我目前在package.json中的内容:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
我想在启动脚本中设置环境变量(如NODE_ENV),同时仍然能够用一个命令启动应用程序,npm start。
当前回答
注意:为了设置多个环境变量,脚本应该是这样的
"scripts": {
"start": "set NODE_ENV=production&& set MONGO_USER=your_DB_USER_NAME&& set MONGO_PASSWORD=DB_PASSWORD&& set MONGO_DEFAULT_DATABASE=DB_NAME&& node app.js",
},
其他回答
当NODE_ENV环境变量被设置为“production”时,包中的所有devDependencies。当运行NPM install时,Json文件将被完全忽略。你也可以使用——production标志来强制执行:
npm install --production
要设置NODE_ENV,您可以使用这些方法中的任何一种
方法一:为所有节点应用设置NODE_ENV
窗口:
set NODE_ENV=production
Linux、macOS或其他基于unix的系统:
export NODE_ENV=production
这将为当前bash会话设置NODE_ENV,因此在此语句后启动的任何应用程序都将NODE_ENV设置为生产。
方法2:设置当前应用的NODE_ENV
NODE_ENV=production node app.js
这将仅为当前应用设置NODE_ENV。当我们想要在不同的环境中测试应用程序时,这很有帮助。
方法三:创建。env文件并使用
这使用了这里解释的想法。请参考这篇文章了解更详细的解释。
基本上,您创建一个.env文件,并运行一些bash脚本在环境上设置它们。
为了避免编写bash脚本,可以使用env-cmd包来加载.env文件中定义的环境变量。
env-cmd .env node app.js
方法四:使用跨环境包
这个包允许以一种方式为每个平台设置环境变量。
在用npm安装它之后,你可以把它添加到你的部署脚本中。Json格式如下:
"build:deploy": "cross-env NODE_ENV=production webpack"
在windows中使用git bash。Git Bash处理命令的方式与cmd不同。
当您像这样使用NODE_ENV=production设置环境变量时,大多数Windows命令提示符都会阻塞。(Windows上的Bash是个例外,它使用原生Bash。)类似地,窗口和POSIX命令利用环境变量的方式也有所不同。对于POSIX,您使用:$ENV_VAR,在windows上使用%ENV_VAR%。-交叉环境文件
{
...
"scripts": {
"help": "tagove help",
"start": "env NODE_ENV=production tagove start"
}
...
}
使用dotenv包来声明env变量
对于更大的环境变量集,或者当你想重用它们时,可以使用env-cmd。
另外,.env文件也可以与direnv一起工作。
。/。env文件:
# This is a comment
ENV1=THANKS
ENV2=FOR ALL
ENV3=THE FISH
/ package.json:
{
"scripts": {
"test": "env-cmd mocha -R spec"
}
}
{
...
"scripts": {
"start": "ENV NODE_ENV=production someapp --options"
}
...
}
因为我经常需要处理多个环境变量,所以我发现将它们保存在一个单独的.env文件中很有用(请确保在源代码控制中忽略这一点)。然后(在Linux中)在启动应用程序之前在脚本命令中前置export $(cat .env | xargs) &&。
例如。env文件:
VAR_A=Hello World
VAR_B=format the .env file like this with new vars separated by a line break
示例index.js:
console.log('Test', process.env.VAR_A, process.env.VAR_B);
示例package.json:
{
...
"scripts": {
"start": "node index.js",
"env-linux": "export $(cat .env | xargs) && env",
"start-linux": "export $(cat .env | xargs) && npm start",
"env-windows": "(for /F \"tokens=*\" %i in (.env) do set %i)",
"start-windows": "(for /F \"tokens=*\" %i in (.env) do set %i) && npm start",
}
...
}
不幸的是,我似乎不能通过从脚本中调用脚本来设置环境变量——比如“start-windows”:“npm run env-windows && npm start”——所以脚本中有一些冗余。
对于一个测试,你可以通过运行npm run env-linux或npm run env-windows来查看env变量,并通过运行npm run start-linux或npm run start-windows来测试它们是否进入了你的应用程序。