我们试图只使用nodeJS与其他包的依赖性最小,我们现在遇到的挑战是HandelbarsJS。我们找到了一个包,可以为我们生成html的汇编。只是,它非常非常慢,每次约3秒,在这3秒内,下一行有2,5 / 2,7秒:
var assemble = require('assemble');
我们的package.json脚本部分:
"scripts": {
"build:handlebars": "node scripts/handlebars.js",
"watch:handlebars": "nodemon --watch assets --exec \"npm run build:handlebars\"" }
脚本/ handlebars.js文件
#! /usr/bin/env node
var assemble = require('assemble');
var extname = require('gulp-extname');
console.log(Date.now() - start);
assemble.data('assets/templates/data/*.json');
assemble.layouts('assets/templates/layouts/*.hbs');
assemble.partials('assets/templates/partials/*.hbs');
assemble.src('assets/templates/*.hbs', { layout: 'default' })
.pipe(extname())
.pipe(assemble.dest('build/'));
每次,当我们保存.hbs文件时,Nodemon会重新启动并调用外部javascript文件。
我们如何确保“需要”'只被召唤一次,或者它们是否留在记忆中?
谢谢!
答案 0 :(得分:1)
由于您希望使用assemble
完成此操作,但没有gulp
,我建议使用chokidar
。
npm install chokidar --save
现在您可以像这样要求chokidar
:
var chokidar = require('chokidar');
然后定义一个小帮助程序,只要模式中的某些内容发生变化,就会运行handler
:
function watch(patterns, handler) {
chokidar.watch(patterns, {
ignoreInitial: false
}).on('add', handler).on('change', handler).on('unlink', handler);
}
现在我们可以改变这样的脚本:
#! /usr/bin/env node
var assemble = require('assemble');
var extname = require('gulp-extname');
var chokidar = require('chokidar');
console.log(Date.now() - start);
assemble.data('assets/templates/data/*.json');
assemble.layouts('assets/templates/layouts/*.hbs');
assemble.partials('assets/templates/partials/*.hbs');
// Enable --watch command line for Chokidar, otherwise, just run!
if (process.argv.pop() === '--watch') {
watch('assets', runOnce);
} else {
runOnce();
}
function watch(patterns, handler) {
chokidar.watch(patterns, {
ignoreInitial: false
}).on('add', handler).on('change', handler).on('unlink', handler);
}
function runOnce() {
assemble.src('assets/templates/*.hbs', { layout: 'default' })
.pipe(extname())
.pipe(assemble.dest('build/'));
}
而不是nodemon
,这将使您的脚本保持活动并运行。所以,在npm
中,你想要这个:
"scripts": {
"build:handlebars": "node scripts/handlebars.js",
"watch:handlebars": "node scripts/handlebars.js --watch"
}
每当文件发生变化时,脚本现在都会运行,无需从头开始重新调用。
答案 1 :(得分:0)
汇编的beta版本基于gulp并且有一个你可以像使用gulp一样使用的cli,但是如果你不想使用cli而是使用npm脚本,你可以做一些基于@ roel-van-uden的回答没有chokidar,也能够重新加载实际资产(例如数据,布局,部分)
__END__