簡體   English   中英

NodeJs:具有依賴項的外部javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM