有没有人可以告诉我如何让 grunt 任务加载得更快。我真的很想减少加载时间,因为大多数任务需要 1 秒才能加载。
特别是对于“监视”任务。当我观察变化时,我真的想更快地编译 sass。
有任何想法吗?
谢谢
你真的在寻找这个:jit-grunt。
jit-grunt 不会每次都加载所有任务,而是只会加载那些必要的任务。
有与 OP 相同的问题:grunt watch编译 .less 文件和 liveReload 非常慢,所以这就是我所做的:
安装time-grunt以显示每个任务的执行时间:
$ npm install --save-dev time-grunt
然后将此行放在模块导出之后:
module.exports = function(grunt) {
require('time-grunt')(grunt);
运行 grunt 后,您会注意到哪些任务比其他任务花费的时间更长。就我而言,它正在加载每个文件更改的所有依赖项,所以我找到了这个解决方案:
安装jit-grunt以按需加载依赖项,而不是在每次 grunt 执行任务时加载所有依赖项。
$ npm install jit-grunt --save-dev
并替换 gruntfile 中的初始加载程序
require('load-grunt-tasks')(grunt);
和
require('jit-grunt')(grunt);
这将我的 .css 更新的 liveReload 时间从 ~1600ms 节省到 ~250ms。
PS:@curist 也建议使用 jit-grunt,但我认为更多细节可能对任何人都有帮助。
如果你的 grunt 在 Vagrant virtualbox 中,你可以通过 nfs 同步,这比默认共享要快一点。(但仍然比本机文件系统慢)
在您的 Vagrantfile 中:
config.vm.synced_folder ".", "/vagrant", type: "nfs"
在我的机器上,是时候让 grunt 加载任务了(使用 ssd):
native: ~1s
nfs: ~4s
default Vagrant sharing: ~16s
同样的问题,在更改并执行任务后,所有模块都被重新加载。
但我在 github 上找到了一个非常好的解决方案(https://github.com/steida/grunt-este-watch)
由于历史原因,它使用 fs.fileWatch 和 fs.watch 的组合,它很慢而且有问题。从 Node 0.9.2+ 开始, fs.watch 就可以了。
安装 grunt-este-watch
npm install grunt-este-watch --save-dev
更改贡献表
grunt.loadNpmTasks('grunt-contrib-watch');
埃斯特手表
grunt.loadNpmTasks('grunt-este-watch');
改变任务
watch: {
javascript: {
files: 'src/js/**/*',
tasks: ['uglify']
}
}
至
esteWatch: {
options: {
dirs: ['../src/**/*']
},
'js': function(filepath) { return 'uglify' }
}
听起来您的计算机是这里的问题,您将没有太多选择,只能升级。
我唯一能想到的是并发任务,如果您可以同时运行任务,您可能会节省一些时间。
您可以按照 repo 中的说明使用grunt-concurrent :
同时运行 Coffee 和 Sass 等慢速任务可能会显着缩短构建时间。如果您需要同时运行多个阻塞任务(如 nodemon 和 watch),此任务也很有用,如示例配置中所示。
您还可以使用此技巧仅在需要时加载任务。