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”。

这可能吗?


可悲的是,没有像postInstallpostInstallDev区别。 尽管如此,你可以创建一个中间脚本来处理差异。 例如,如果您有以下情况:

"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);

一些外围相关的点...

  • 尽量不要有Grunt和co。 作为dependencies 。 让他们去开发devDependencies以避免必须在生产中安装所有的东西。 在上面的香草节点中有一个中间脚本可以让你做到这一点。 我喜欢使用这样的postInstall脚本来安装git钩子脚本(但也仅限于开发环境)。
  • 您不必使用./node_modules/grunt/bin/grunt default 。 如果grunt-cli是一个dependencydevDependency ,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

    下一篇: Copy Photos to Staging S3 (using rails and paperclip)