2015-10-06 119 views
3

我试图构建一个package.json,以便在Heroku上运行NodeJS应用程序时,它将使用环境变量运行scripts.postinstall步骤。例如:是否有可能在npm/package.json中使用环境变量?

... 
"scripts": { 
    "postinstall": "command $ENV_VAR"} 
}, 
... 

我已经看过了docs,没能找到的东西说我可以。

这甚至可能吗?这甚至是可取的和“我做错了吗?”?

回答

7

回答最后一个问题,因为它们是最重要的问题:是的,不是,绝对是因为您刚刚破坏了跨平台兼容性。不能保证你的环境语法适用于所有操作系统上的所有shell,所以不要这样做。

我们已经向我们提供了有保证的跨平台技术:节点。因此,创建一个名为bootstrap.js的文件,然后将npm运行node bootstrap作为您的安装后脚本。由于bootstrap.js中的代码将像其他任何节点脚本一样运行,因此它将以完全跨平台兼容的方式访问process.env,并且每个人都会很开心。

还有许多,使用通用utils的有节点等价,这样你就可以npm安装它们,本地而不是全局的,然后再打电话给他们在NPM剧本很多,很多事情。例如mkdir -p不是跨平台的,但安装mkdirp模块,然后当为npm run ensuredirs

为方便起见,运行像"ensuredirs": "mkdirp dist/assets"的NPM脚本正常工作到处,最常见的UNIX工具都有自己的亚军包,shx,这是完全跨平台的,并使开发人员的生活更容易。

3

忽略可笑的人。你可以用跨平台的方式使用cross-var

"scripts": { 
    "postinstall": "cross-var command $ENV_VAR" 
} 
相关问题