Grunt 网站项目 -- 如何使用 git 部署或处理 dist 文件夹
Grunt Website Project -- How to deplo or handle dist folder with git
为了更上一层楼,我终于想进入G运行t了。
慢慢开始,在我尝试所有可能性之前,我现在主要对缓存破坏器感兴趣(使用 Ben Holland 的 grunt-cache-bust
)。
我想 我设法完成了所有很棒的优化任务 运行 并创建了一个 dist
文件夹,其中将包含最终的可以提供的文件版本。
但是,在部署时,我无法处理这个文件夹。
我觉得在我的开发机器上构建文件夹并将其推送到 git 并没有什么意义。然后,让我的服务器拉取整个回购并仅提供 dist
文件夹。
考虑到持续集成,服务器不应该拉取 git、运行 g运行t 并提供 dist 文件夹吗?
但这样我的服务器还需要安装 node 和 g运行t 以及 运行ning。
Q1那么最好的做法是什么?
- 在服务器
dist
上构建和服务
- 在本地构建,提交并推送到 repo
Q2您正在执行哪些常见的 g运行t 操作(例如为开发构建、为生产构建...)?
Q3大项目如何处理G运行t的使用?
(我正在使用 Laravel 但我还没有部署它。)
Q4 我假设 node_module
应该在我的 git 忽略,对吧?
Q4:你应该总是 gitignore
node_module
, bower_components
, .tmp
访问这个有用的 .gitignore 集合 templates。您可能会找到适合您环境的那个。
Q3:Grunt 可以很好地扩展以用于任何规模的项目,包括大型和分布式团队。不过,您如何配置 Gruntfile
很重要。看看这个article
Q2:Grunt 的大部分任务都是多任务,这意味着它们可以有多个目标,每个目标都有自己的一组配置选项。所以你可以让任务以一种方式为一个目标(dev
)执行,以另一种方式为第二个目标(dist
)执行。
以您的 stylesheet
为例,虽然在部署到 prod
之前您应该 compile(sass)/concat/minify
您的 CSS
,但您可能只想 compile/concat
dev
目的。
你也一样JavaScript。在产品中,compile(coffeescript)/concat/minify/uglify/mangle
而在开发中,你将只是 compile(coffeescript)/concat
.
以下是一些常见的 grunt 操作:
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'
]);
Q1:最佳实践:"building it locally, commit and push to repo"。为什么?
1- 因为否则你必须拥有所有这些工具(Node
、Grunt
、Bower
、Compass
等。)installed/maintained 在构建服务器上。 Bower
使用 Git 关闭并使用来自 Git
的包,指南针需要安装 Ruby
。 (构建服务器上的移动部件太多,您可能完全控制也可能不完全控制)。
2- 如果您无法控制构建环境服务器怎么办。 (例如:使用 AWS、VSO 等...)
3- 想象一下:您在 package.json 中设置了一个依赖项以使用脱字符号 (^) 前缀或波浪号 (~) 前缀(例如:^1.1.5)。您已经在服务器上构建并部署了项目,每个人都很高兴。
几周后,您的一位队友检查了他的更改,构建按计划在服务器上运行,但由于该软件包的最新版本现在更高(例如 1.4.1),您的产品构建方式有所不同并且不再支持您在 Gruntfile.js 中使用的选项之一。您的 Prod 要么失败,要么在最坏的情况下继续工作,但它的行为不正常。祝你好运弄清楚发生了什么。
虽然,我希望看到我的服务器处理所有构建(例如;TeamCity
有一个插件来支持 NodeJS
)。我很舒服,而是部署已经过测试的东西。
为了更上一层楼,我终于想进入G运行t了。
慢慢开始,在我尝试所有可能性之前,我现在主要对缓存破坏器感兴趣(使用 Ben Holland 的 grunt-cache-bust
)。
我想 我设法完成了所有很棒的优化任务 运行 并创建了一个 dist
文件夹,其中将包含最终的可以提供的文件版本。
但是,在部署时,我无法处理这个文件夹。
我觉得在我的开发机器上构建文件夹并将其推送到 git 并没有什么意义。然后,让我的服务器拉取整个回购并仅提供 dist
文件夹。
考虑到持续集成,服务器不应该拉取 git、运行 g运行t 并提供 dist 文件夹吗?
但这样我的服务器还需要安装 node 和 g运行t 以及 运行ning。
Q1那么最好的做法是什么?
- 在服务器
dist
上构建和服务 - 在本地构建,提交并推送到 repo
Q2您正在执行哪些常见的 g运行t 操作(例如为开发构建、为生产构建...)?
Q3大项目如何处理G运行t的使用?
(我正在使用 Laravel 但我还没有部署它。)
Q4 我假设 node_module
应该在我的 git 忽略,对吧?
Q4:你应该总是 gitignore
node_module
, bower_components
, .tmp
访问这个有用的 .gitignore 集合 templates。您可能会找到适合您环境的那个。
Q3:Grunt 可以很好地扩展以用于任何规模的项目,包括大型和分布式团队。不过,您如何配置 Gruntfile
很重要。看看这个article
Q2:Grunt 的大部分任务都是多任务,这意味着它们可以有多个目标,每个目标都有自己的一组配置选项。所以你可以让任务以一种方式为一个目标(dev
)执行,以另一种方式为第二个目标(dist
)执行。
以您的 stylesheet
为例,虽然在部署到 prod
之前您应该 compile(sass)/concat/minify
您的 CSS
,但您可能只想 compile/concat
dev
目的。
你也一样JavaScript。在产品中,compile(coffeescript)/concat/minify/uglify/mangle
而在开发中,你将只是 compile(coffeescript)/concat
.
以下是一些常见的 grunt 操作:
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'
]);
Q1:最佳实践:"building it locally, commit and push to repo"。为什么?
1- 因为否则你必须拥有所有这些工具(Node
、Grunt
、Bower
、Compass
等。)installed/maintained 在构建服务器上。 Bower
使用 Git 关闭并使用来自 Git
的包,指南针需要安装 Ruby
。 (构建服务器上的移动部件太多,您可能完全控制也可能不完全控制)。
2- 如果您无法控制构建环境服务器怎么办。 (例如:使用 AWS、VSO 等...)
3- 想象一下:您在 package.json 中设置了一个依赖项以使用脱字符号 (^) 前缀或波浪号 (~) 前缀(例如:^1.1.5)。您已经在服务器上构建并部署了项目,每个人都很高兴。
几周后,您的一位队友检查了他的更改,构建按计划在服务器上运行,但由于该软件包的最新版本现在更高(例如 1.4.1),您的产品构建方式有所不同并且不再支持您在 Gruntfile.js 中使用的选项之一。您的 Prod 要么失败,要么在最坏的情况下继续工作,但它的行为不正常。祝你好运弄清楚发生了什么。
虽然,我希望看到我的服务器处理所有构建(例如;TeamCity
有一个插件来支持 NodeJS
)。我很舒服,而是部署已经过测试的东西。