NodeJs:带有依赖的外部javascript
NodeJs: external javascript with dependencies
我们试图只使用对其他包依赖最小的nodeJS,我们现在遇到的挑战是HandelbarsJS。我们找到了一个可以为我们生成html的程序包Assemble。只是,它非常非常慢,每次大约3秒,在这3秒中,有2,5/2,7秒的下一行:
var assemble = require('assemble');
我们的包。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文件将被调用。
我们如何确保'require'只被调用一次,或者它们是否留在内存中?
谢谢!
由于您希望在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"
}
无论何时文件发生变化,脚本现在都将运行,而无需从头重新调用。
assemble的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']);
}
相关文章:
- 使用html中的外部javascript进行数据验证
- 将变量传递给外部Javascript
- 关于引入外部javascript文件的问题&css通过https
- 有没有办法在tinymceiframe中加载一个外部javascript文件
- 如何在MVC5中ajax调用的部分视图中引用外部javascript
- HTML外部javascript加载另一个javascript
- 如何在定义js文件后为外部javascript文件设置变量
- ResolveUrl没有'我似乎不适合当链接到具有动态虚拟目录的外部javascript文件时
- 如何在小部件中添加外部javascript库和样式表
- 外部JavaScript验证不起作用
- Chrome扩展无法通过清单加载外部javascript
- 动态虚拟目录和外部 JavaScript 链接
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- 如何从窗体调用外部javascript方法
- 如何使用外部Javascript库(如jQuery)重命名Google闭包样式表
- 如何使用Java在WebDriver中调用外部JavaScript
- 从Haml调用外部javascript中的ruby数组
- 在选择更改时更改从外部javascript生成的flash播放器
- 缓存javascript失败,因为使用了外部javascript
- 在AngularJS中手动加载和卸载外部javascript