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那么最好的做法是什么?

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- 因为否则你必须拥有所有这些工具(NodeGruntBowerCompass 等。)installed/maintained 在构建服务器上。 Bower 使用 Git 关闭并使用来自 Git 的包,指南针需要安装 Ruby。 (构建服务器上的移动部件太多,您可能完全控制也可能不完全控制)。

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

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

几周后,您的一位队友检查了他的更改,构建按计划在服务器上运行,但由于该软件包的最新版本现在更高(例如 1.4.1),您的产品构建方式有所不同并且不再支持您在 Gruntfile.js 中使用的选项之一。您的 Prod 要么失败,要么在最坏的情况下继续工作,但它的行为不正常。祝你好运弄清楚发生了什么。

虽然,我希望看到我的服务器处理所有构建(例如;TeamCity 有一个插件来支持 NodeJS)。我很舒服,而是部署已经过测试的东西。