【问题标题】:Why does Grunt go into devDependencies?为什么 Grunt 会进入 devDependencies?
【发布时间】:2013-06-17 14:44:22
【问题描述】:

Grunt 文档声明它(和任何插件)应包含在 package.jsondevDependencies 部分中。我可能遗漏了一些明显的东西,但我不明白为什么。如果我想部署我的应用程序的生产版本,我仍然需要构建它。如果我不构建它,那我为什么需要 Grunt?

换句话说,假设我拉出我的回购并说:

npm install --production

如果 Grunt 在 devDependencies 部分,我现在如何构建我的应用程序?

【问题讨论】:

    标签: npm gruntjs


    【解决方案1】:

    你用 Grunt 做什么?

    Grunt 通常列在 devDependencies 中,因为即使您将其部署到生产环境中,您仍然需要编译 CoffeeScript、SASS 等内容。

    在我们的例子中,它看起来像这样:我们签入 GitHub 的最新更改,然后我们的部署脚本登录到服务器,从 GitHub master 拉取最新代码,运行 npm install,然后运行 ​​grunt production。

    然后我们在服务器上对站点进行了干净的生产构建。

    【讨论】:

    • 如果您使用的是npm install,那么如果Grunt 被列在dependencies 而不是devDependencies,会发生什么变化?
    • devDependencies 是开发人员用来创建某些东西(测试、构建过程等)的那些。依赖项是运行时需要的东西。对于你到底想用 Grunt 做什么,我仍然有点困惑。
    • 我正在使用我们自己的 CommonJS 兼容框架实现一个客户端应用程序,这是一个非常不寻常的用例。所以我试图了解人们通常是如何使用 Grunt 的,但在什么情况下将它放入 devDependencies 会产生实际影响,对我来说并不明显。据我所知,根据您和亚当的回答,这可能更像是一个惯例问题,而不是其他任何事情。我收集到,通常在使用 Grunt 时,生产代码中不会使用任何 Node 包(devDependencies 或普通dependencies)。
    • 是的,除非您正在构建某种组件或可重用模块。一旦 Grunt 完成了它的事情,它通常就完成了。
    • 好吧,听起来devDependencies 的使用更多是基于一种感觉,即 Grunt 是一种开发工具,而不是分离开发和生产依赖项的实际愿望。
    【解决方案2】:

    通常 Grunt 用于开发,它可能会处理测试、样式表预处理器、javascript uglifying 等。您不会将 Grunt 相关文件作为生产代码的一部分分发,而是分发经过缩小、测试、丑化的代码.

    【讨论】:

    • 对,但在这种情况下,dependencies 中的任何模块都不会成为生产代码的一部分,对吧?
    • dependencies 中的模块确实有望成为生产代码的一部分。如果我的代码使用foo 模块,foo 必须在dependencies 部分。如果我的测试使用bar 模块,它应该出现在devDependencies 部分。我相信关于grunt 属于devDependencies 部分的声明是基于您的生产代码将具有require('foo') 语句但没有require('grunt') 语句的想法
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2011-04-19
    • 2015-11-17
    相关资源
    最近更新 更多