为了加强我的比赛,我终于想进入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中忽略,对吗?
答案 0 :(得分:1)
Q4 :您应该gitignore
node_module
,bower_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-原因否则您必须在构建中安装/维护所有这些工具(Grunt
,Bower
,Compass
,Bower
等。)服务器。 Git
使用Git关闭并使用来自Ruby
的软件包,指南针需要安装TeamCity
。 (构建服务器上的移动部件太多,您可能或可能无法完全控制)。
2-如果您无法控制构建环境服务器,该怎么办? (例如:使用AWS,VSO等......)
3-想象一下:你已经在package.json中设置了一个依赖项,以使用插入符号(^)前缀或波浪号(〜)前缀(例如:^ 1.1.5)。您已在服务器上构建项目并进行部署,每个人都很高兴。
几个星期后,你的一个队友检查他的更改,构建在服务器上按计划运行,但由于该软件包的最新版本现在更高(例如1.4.1),所以你的prod构建方式不同而且可以不再支持您在Gruntfile.js中使用的其中一个选项。你投机会失败,或者最坏的情况下,继续工作,但它是行为不端。祝你好运搞清楚发生了什么。
虽然,我希望看到我的服务器负责所有构建(例如,NodeJS
有一个插件来支持{{1}})。我很舒服,部署了经过测试的内容。