我可以在构建服务器上运行Grunt.js而无需在每个构建中安装依赖项吗?

时间:2016-05-12 09:15:34

标签: node.js gruntjs teamcity build-automation

我在使用grunt作为构建过程的一部分时遇到了一些困难。我们使用TeamCity服务器在部署之前运行grunt命令。基本上我们希望能够检查未缩小的js和css,然后让Grunt在部署之前为我们缩小它。

我遇到的问题是,对于每个构建,TeamCity删除构建文件系统的内容并将其从GIT拉回(这很好,因为当我们不想要它们时会停止旧文件)。 Grunt似乎insist that all dependencies are installed locally to the GruntFile.js though

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

我希望以某种方式全局安装依赖项并且只下载一次(它们很少更改),并且每次构建时只使用这些下载的依赖项。但我似乎无法弄清楚如何做到这一点?

我想到了检查node_modules文件夹的想法,但后来我意识到这包含 8800文件:O所以我宁愿不用此污染GIT存储库。

这是package.json,用于显示我们的依赖性:

{
  "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"
  ]
}

我实际上没有设置这个,而且我对grunt节点的大部分知识源于几天的研究,所以我不能100%确定为什么这样配置。如果出现严重错误,可以提供更好的建议吗?

1 个答案:

答案 0 :(得分:2)

您可能确实想要配置Artifact dependencies

我的意思是;您可以创建一个单独的构建配置,它可以完成两件事:

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

然后,此配置可以配置一些trigger rules,以便在package.json文件中发生更改时启动构建。

然后,您现在拥有的主要配置将依赖于第一个配置。然后,它会将Artifacts规则配置为获取node_modules,以及它。