我创建了一个 browserify 转换来将.pug
文件转换为预解析的 Ractive JSON 对象。该操作需要将 Pug 文件转换为 HTML,然后传递给Ractive.parse()
函数。
初始构建后不起作用的是,当我更改相对 Pug 文件时,browserify 不会重新编译父文件,因此更改不会反映到捆绑文件中。我watchify
用来观察文件的变化。
考虑以下hello.js
文件:
var x = require('./index.pug')
...
和index.pug
文件:
b hello
include ./a.pug
我可以["/path/to/index.pug", "/path/to/a.pug"]
在我的转换函数中获得。我如何将它传递给 browserify 以使其相关缓存在转换函数中index.pug
或a.pug
已更改时失效?
我的变换函数如下:
var through2 = require('through2')
preparsePug = function(file, contents){
// returns {
// dependencies (Array),
// parsed (String)
// }
...
}
function isTemplate(file){
return /.*\.(pug)$/.test(file);
}
exports.ractivePreparserify = function(file){
var contents, write, flush;
if (!isTemplate(file)) {
return through();
}
contents = '';
write = function(chunk, enc, next){
contents += chunk.toString('utf-8');
next();
};
flush = function(cb){
try {
var x = preparsePug(file, contents);
this.push("module.exports = " + JSON.stringify(x.parsed));
return cb();
} catch (err) {
console.error("Preparserify error: ", err);
return this.emit('error', err);
}
};
return through2.obj(write, flush);
};