关于node.js:我可以在构建服务器上运行Grunt.js而不在每个构建中安装依赖项吗?

Can I run Grunt.js on build server without installing dependencies in every build?

我在使用Grunt作为构建过程的一部分时遇到了一些困难。我们正在使用TeamCity服务器在部署之前运行grunt命令。实际上,我们希望能够签入未缩小的JS和CSS,然后在部署之前让Grunt为我们缩小它。

我遇到的问题是,对于每个构建TeamCity,删除构建文件系统的内容,然后将其从Git中拉出来(这很好,因为当我们不需要旧文件时,它可以阻止旧文件在周围徘徊)。不过,grunt似乎坚持所有依赖项都安装在gruntfile.js的本地。

这意味着对于每个构建,我都必须运行npm install。这需要很长时间,并且确实会减慢我们的部署过程(更不用说在团队城市中运行时,我们的代理服务器似乎不喜欢这样的事实…)

我希望能够以某种方式在全球范围内安装依赖项,并且只下载一次(它们很少更改),并且每次构建时只使用这些下载的依赖项。但我似乎不知道怎么做?

我玩弄着签入node_modules文件夹的想法,但后来我意识到这个文件夹包含8800个文件:o所以我不想用这个来污染git存储库。

下面是package.json,显示我们有哪些依赖关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
 "name":"name",
 "title":"title",
 "description":"description",
 "version":"0.0.1",
 "engines": {
   "node":">=0.8"
  },
 "scripts": {
   "test":"grunt assemble"
  },
 "dependencies": {
   "assemble":"^0.4.42",
   "css-parse":"^1.5.3",
   "globule":"^0.2.0",
   "grunt":"~0.4.2",
   "grunt-combine-media-queries":"^1.0.19",
   "grunt-contrib-clean":"^0.6.0",
   "grunt-contrib-concat":"^0.3.0",
   "grunt-contrib-connect":"^0.6.0",
   "grunt-contrib-copy":"~0.5.0",
   "grunt-contrib-cssmin":"^0.10.0",
   "grunt-contrib-jshint":"^0.8.0",
   "grunt-contrib-less":"^0.9.0",
   "grunt-contrib-uglify":"^0.3.3",
   "grunt-contrib-watch":"^0.5.3",
   "grunt-cssshrink":"0.0.5",
   "grunt-lesslint":"^1.1.7",
   "grunt-modernizr":"^0.5.2",
   "grunt-prettify":"^0.3.5",
   "grunt-replace":"^0.6.2",
   "grunt-stripmq":"0.0.3",
   "handlebars-helper-repeat":"^0.2.0",
   "load-grunt-tasks":"^0.2.1",
   "pretty":"^0.1.2",
   "time-grunt":"^0.2.10"
  },
 "keywords": [
   "assemble",
   "templates",
   "handlebars",
   "site generator",
   "site builder",
   "grunt"
  ]
}

实际上我没有设置这个,而且我对咕噜的大部分知识,都来自于几天的研究,所以我不能100%确定为什么要将这个配置为它是这样的。如果有什么惊人的错误,愿意接受更好的建议吗?


实际上,您可能想要配置工件依赖关系。

我的意思是,您可以创建一个单独的构建配置,它有两个功能:

  • npm install获取所有8K文件
  • node_modules文件夹保存为工件(打包为存档,为什么不保存?)

然后,该配置可以配置一些触发规则,以便在package.json文件发生更改时启动构建。

然后,您现在拥有的主要配置将依赖于第一个配置。然后它将配置工件规则来获取node_modules,就是这样。