npm postinstall脚本根据enviro运行grunt任务
我有两个heroku node.js应用程序,一个用于产品,一个用于开发,另外我还有一个Gruntfile,其中包含特定于dev和prod的任务。 我知道你可以设置package.json来运行grunt作为npm的postinstall钩子,但是你可以指定不同的任务来运行,具体取决于你所在的环境吗?
以下是我的package.json的相关部分到目前为止的样子:
"scripts": {
"postinstall": "./node_modules/grunt/bin/grunt default"
},
如果NODE_ENV是制作等,我宁愿运行“grunt production”。
这可能吗?
可悲的是,没有像postInstall
和postInstallDev
区别。 尽管如此,你可以创建一个中间脚本来处理差异。 例如,如果您有以下情况:
"scripts": { "postinstall": "node postInstall.js" },
然后在这个脚本中,你可以检查环境变量并从那里执行正确的Grunt任务:
// postInstall.js
var env = process.env.NODE_ENV;
if (env === 'development') {
// Spawn a process or require the Gruntfile directly for the default task.
return;
}
if (env === 'production') {
// Spawn a process or require the Gruntfile directly to the prod task.
return;
}
console.error('No task for environment:', env);
process.exit(1);
一些外围相关的点...
dependencies
。 让他们去开发devDependencies
以避免必须在生产中安装所有的东西。 在上面的香草节点中有一个中间脚本可以让你做到这一点。 我喜欢使用这样的postInstall脚本来安装git钩子脚本(但也仅限于开发环境)。 ./node_modules/grunt/bin/grunt default
。 如果grunt-cli
是一个dependency
或devDependency
,npm知道去哪里看,而grunt default
会正常工作。 出于某种原因,我的开发环境从未运行过我的“开发”if语句。 我给Heroku支持发了一张票,这是他们的回答:“默认情况下,你的环境在slug编译期间是不可用的。如果你想使它可用,你可以启用一个名为”user-env-compile“请参阅以下文章:http://devcenter.heroku.com/articles/labs-user-env-compile“。 很高兴知道。 所以,我使用heroku-buildpack-nodejs-grunt buildpack去了另一条路线,然后创建了一个heroku:development grunt任务。
链接地址: http://www.djcxy.com/p/85099.html上一篇: npm postinstall script to run grunt task depending on enviro