[英]NodeJs: external javascript with dependencies
我們試圖僅使用對其他軟件包的依賴性最小的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\"" }
script / 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
,我建議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"
}
每當文件更改時,腳本現在都將運行,而無需從頭開始重新調用。
beta版的assemble基於gulp並具有cli,您可以像使用gulp一樣使用cli,但是如果您不想使用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']);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.