Grunt网站项目 - 如何使用git部署或处理dist文件夹

时间:2015-04-09 03:06:09

标签: git gruntjs web-deployment

为了加强我的比赛,我终于想进入Grunt。 从很慢的开始,我现在最感兴趣的是缓存破坏者(使用Ben Holland的grunt-cache-bust),然后我开始了解所有可能性。

我认为我设法让所有优秀的优化任务运行并创建一个dist文件夹,其中包含可以提供的文件的最终版本。

但是,在部署时,我无法理解处理此文件夹。

我觉得在我的开发机器上构建文件夹并没有意义,并将其推送到git。然后,vave我的服务器拉出整个repo并仅提供dist文件夹。

考虑到持续集成,服务器是否应该拔出git,运行grunt并提供dist文件夹?

但是这样我的服务器也需要安装并运行node和grunt。

Q1 那么最佳做法是什么?

  • 在服务器上构建和提供dist
  • 在本地构建,提交并推送回购

Q2 您正在采取哪些常见的grunt操作(例如构建开发,构建生产......)?

Q3 大型项目如何处理Grunt的使用? (我正在使用Laravel,但我还没有部署它。)

Q4 我认为node_module应该在我的git中忽略,对吗?

1 个答案:

答案 0 :(得分:1)

Q4 :您应该gitignore node_modulebower_components.tmp

访问此有用的.gitignore templates集合。你可能只是找到适合你环境的产品。

Q3 :Grunt很适合在任何规模的项目中使用,包括大型和分布式团队。您如何配置Gruntfile事项。看一下这个article

Q2 :Grunt的大多数任务都是多任务,这意味着他们可以拥有多个目标,每个目标都有自己的一组配置选项。所以你可以拥有一个为一个目标(dev)执行一种方式的任务,而以另一种方式为另一个目标(dist)执行任务。

以您的stylesheet为例,在部署到compile(sass)/concat/minify之前CSS prod compile/concat,您可能只想dev compile(coffeescript)/concat/minify/uglify/mangle目的。

同样适合你的JavaScript。在prod,compile(coffeescript)/concat,而在开发中你只需grunt.registerTask('test', [ 'clean:server', 'concurrent:test', 'autoprefixer', 'connect:test', 'karma' ]); grunt.registerTask('build', [ 'clean:dist', 'useminPrepare', 'concurrent:dist', 'autoprefixer', 'concat', 'copy:dist', 'cdnify', 'ngmin', 'cssmin', 'uglify', 'rev', 'usemin', 'htmlmin' ]); grunt.registerTask('default', [ 'jshint', 'test', 'build' ]);

以下是一些常见的grunt操作:

Node

Q1 :最佳做法:“在本地构建,提交并推送回购”。为什么呢?

1-原因否则您必须在构建中安装/维护所有这些工具(GruntBowerCompassBower等。)服务器。 Git使用Git关闭并使用来自Ruby的软件包,指南针需要安装TeamCity。 (构建服务器上的移动部件太多,您可能或可能无法完全控制)。

2-如果您无法控制构建环境服务器,该怎么办? (例如:使用AWS,VSO等......)

3-想象一下:你已经在package.json中设置了一个依赖项,以使用插入符号(^)前缀或波浪号(〜)前缀(例如:^ 1.1.5)。您已在服务器上构建项目并进行部署,每个人都很高兴。

几个星期后,你的一个队友检查他的更改,构建在服务器上按计划运行,但由于该软件包的最新版本现在更高(例如1.4.1),所以你的prod构建方式不同而且可以不再支持您在Gruntfile.js中使用的其中一个选项。你投机会失败,或者最坏的情况下,继续工作,但它是行为不端。祝你好运搞清楚发生了什么。

虽然,我希望看到我的服务器负责所有构建(例如,NodeJS有一个插件来支持{{1}})。我很舒服,部署了经过测试的内容。