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']); }