fib-mopshond
pugjs is een populaire js-sjabloonengine die voorheen bekend stond als 'Jade'. Deze is gevoelig voor inspringen en levert hoge prestaties. Maar op een gegeven moment kon deze alleen in nodejs worden uitgevoerd (een bepaalde versie van 'Jade' kan in de browser worden uitgevoerd), omdat vanaf dat moment point pugjs ondersteunen API's zoals renderFile
waarvoor I/O-runtime vereist is.
IO
Gelukkig heeft fibjs vanaf fs
de module een vergelijkbare API met nodejs, we kunnen pugjs in fibjs uitvoeren, doe gewoon een magische hack met de sandbox
module van fibjs.
Mechanisme
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/**
* only test in fibjs 0.21 and pug@2.0.0-rc.4
*
*/
const vm = require('vm');
const sbox = new vm.SandBox({
fs: require('fs'),
path: require('path'),
http: require('http'),
https: require('http'),
assert: require('assert'),
url: require('url'),
os: require('os'),
util: require('util')
});
// one valid pug module
const pug = sbox.require('pug', __filename)
zoals bovenstaande code, geef gewoon de eigenschapsmodule op voor de originele pug
module in nodejs, je kunt pugjs uitvoeren in fibjs.
Maar ik kan niet alle versies van fibjs en pug testen, dus markeer ik de geteste versie van fibjs en pugpackage.json
en zou de versie van de ontwikkelaar opmerken wanneer deze module in DEBUG-modus wordt uitgevoerd.
API
Ik ondersteun slechts een aantal API's van pugjs , maar ik geloof dat dit in de meeste gevallen voldoende is voor uw project.
compile
render
renderFile
bekijk de parameters van deze api op de pagina van pugjs .
Steekproef
1
2
3
4
5
6
7
8
9
10
11
12
13#!/usr/bin/env fibjs
const locals = {testVar: '测试变量'}
const rawText = 'div\n\t| #{testVar}'
try {
html = pug.compile(rawText, {pretty: true})(locals);
} catch (e) {
html = ''
error = e.message
}
console.log(html) // '<div>测试变量</div>'