NodeJs:具有依赖关系的外部JavaScript
我们试图只使用nodeJS,而对其他软件包的依赖性最小,我们现在遇到的挑战是HandelbarsJS。 我们find了一个包,可以为我们生成html的Assemble。 只有,这个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文件都会被调用。
我们如何确保“要求”只被调用一次,还是保持在记忆中?
谢谢!
既然你想完成使用这个assemble
,但没有gulp
,我build议chokidar
。
npm install chokidar --save
现在你可以像这样要求chokidar
:
var chokidar = require('chokidar');
然后定义一个小的帮助handler
只要模式中的某些内容发生变化就会运行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" }
只要文件发生变化,脚本就会运行,不需要重新调用。
汇编的beta版本是基于gulp的,有一个cli,你可以像使用gulp一样使用,但是如果你不想使用cli并使用npm脚本,你可以根据@ roel- van-uden的答案没有chokidar,也能够重新加载实际资产(例如数据,布局,部分)
#! /usr/bin/env node var start = Date.now(); var assemble = require('assemble'); var extname = require('gulp-extname'); assemble.task('assets', function () { console.log(Date.now() - start); assemble.data('assets/templates/data/*.json'); assemble.layouts('assets/templates/layouts/*.hbs'); assemble.partials('assets/templates/partials/*.hbs'); return assemble.src('assets/templates/*.hbs', { layout: 'default' }) .pipe(extname()) .pipe(assemble.dest('build/')); }); assemble.task('watch', ['assets'], function () { assemble.watch('./assets/**/*.*', ['assets]'); }); // Enable --watch command line if (process.argv.pop() === '--watch') { assemble.run(['watch']); } else { assemble.run(['assets']); }