mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-15 20:30:39 -07:00
fix: use createRequire for ESM, fixes #334
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
# LiquidJS for Node.js
|
||||||
|
|
||||||
|
## Get Started
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd demo/nodejs
|
||||||
|
npm install
|
||||||
|
npm start
|
||||||
|
```
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { Liquid } from 'liquidjs'
|
||||||
|
|
||||||
|
const engine = new Liquid({
|
||||||
|
extname: '.liquid',
|
||||||
|
globals: { title: 'LiquidJS Demo' },
|
||||||
|
// root files for `.render()` and `.parse()`
|
||||||
|
root: process.cwd(),
|
||||||
|
// layout files for `{% layout %}`
|
||||||
|
layouts: process.cwd() + '/layouts',
|
||||||
|
// partial files for `{% include %}` and `{% render %}`
|
||||||
|
partials: process.cwd() + '/partials'
|
||||||
|
})
|
||||||
|
|
||||||
|
const ctx = {
|
||||||
|
todos: ['fork and clone', 'make it better', 'make a pull request']
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main () {
|
||||||
|
console.log('==========renderFile===========')
|
||||||
|
const html = await engine.renderFile('todolist', ctx)
|
||||||
|
console.log(html)
|
||||||
|
|
||||||
|
console.log('===========Streamed===========')
|
||||||
|
const tpls = await engine.parseFile('todolist')
|
||||||
|
engine.renderToNodeStream(tpls, ctx)
|
||||||
|
.on('data', data => process.stdout.write(data))
|
||||||
|
.on('end', () => console.log(''))
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<html>
|
||||||
|
<head><meta name="title" content="{{title}}"></head>
|
||||||
|
<body>
|
||||||
|
{% block %}{% endblock %}
|
||||||
|
{% render "footer.liquid" %}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "liquidjs-demo-nodejs",
|
||||||
|
"description": "Node.js demo for liquidjs",
|
||||||
|
"private": true,
|
||||||
|
"main": "index.mjs",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node index.mjs"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"hello-liquid": "^1.0.0",
|
||||||
|
"liquidjs": "^9.28.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<small>{{title}}</small>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<li>{{index}} - {{todo}}</li>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{% layout 'html.liquid' %}
|
||||||
|
<h1>{% include "hello-liquid" %}</h1>
|
||||||
|
<ul>
|
||||||
|
{% for todo in todos %}
|
||||||
|
{% render 'todo.liquid' with todo, index: forloop.index%}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
+10
-1
@@ -47,6 +47,11 @@ const browserStream = {
|
|||||||
delimiters: ['', ''],
|
delimiters: ['', ''],
|
||||||
'../emitters/streamed-emitter': '../emitters/streamed-emitter-browser'
|
'../emitters/streamed-emitter': '../emitters/streamed-emitter-browser'
|
||||||
}
|
}
|
||||||
|
const esmRequire = {
|
||||||
|
include: './src/fs/node.ts',
|
||||||
|
delimiters: ['', ''],
|
||||||
|
'./node-require': './node-require.mjs'
|
||||||
|
}
|
||||||
|
|
||||||
const nodeCjs = {
|
const nodeCjs = {
|
||||||
output: [{
|
output: [{
|
||||||
@@ -67,7 +72,11 @@ const nodeEsm = {
|
|||||||
banner
|
banner
|
||||||
}],
|
}],
|
||||||
external: ['path', 'fs'],
|
external: ['path', 'fs'],
|
||||||
plugins: [versionInjection, typescript(tsconfig)],
|
plugins: [
|
||||||
|
versionInjection,
|
||||||
|
replace(esmRequire),
|
||||||
|
typescript(tsconfig)
|
||||||
|
],
|
||||||
treeshake,
|
treeshake,
|
||||||
input
|
input
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import { stringify } from '../util/underscore'
|
import { stringify } from '../util/underscore'
|
||||||
import { Emitter } from './emitter'
|
import { Emitter } from './emitter'
|
||||||
|
import { PassThrough } from 'stream'
|
||||||
|
|
||||||
export class StreamedEmitter implements Emitter {
|
export class StreamedEmitter implements Emitter {
|
||||||
public buffer = '';
|
public buffer = '';
|
||||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
public stream: NodeJS.ReadWriteStream = new PassThrough()
|
||||||
public stream: NodeJS.ReadWriteStream = new (require('stream').PassThrough)()
|
|
||||||
public write (html: any) {
|
public write (html: any) {
|
||||||
this.stream.write(stringify(html))
|
this.stream.write(stringify(html))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { createRequire } from 'module'
|
||||||
|
|
||||||
|
const require = createRequire(import.meta.url)
|
||||||
|
|
||||||
|
export const requireResolve = require.resolve
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
export declare function requireResolve(file: string): string;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export const requireResolve = require.resolve
|
||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
import * as _ from '../util/underscore'
|
import * as _ from '../util/underscore'
|
||||||
import { sep, resolve as nodeResolve, extname, dirname as nodeDirname } from 'path'
|
import { sep, resolve as nodeResolve, extname, dirname as nodeDirname } from 'path'
|
||||||
import { stat, statSync, readFile as nodeReadFile, readFileSync as nodeReadFileSync } from 'fs'
|
import { stat, statSync, readFile as nodeReadFile, readFileSync as nodeReadFileSync } from 'fs'
|
||||||
|
import { requireResolve } from './node-require'
|
||||||
|
|
||||||
const statAsync = _.promisify(stat)
|
const statAsync = _.promisify(stat)
|
||||||
const readFileAsync = _.promisify<string, string, string>(nodeReadFile)
|
const readFileAsync = _.promisify<string, string, string>(nodeReadFile)
|
||||||
@@ -33,7 +34,7 @@ export function resolve (root: string, file: string, ext: string) {
|
|||||||
}
|
}
|
||||||
export function fallback (file: string) {
|
export function fallback (file: string) {
|
||||||
try {
|
try {
|
||||||
return require.resolve(file)
|
return requireResolve(file)
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
export function dirname (filepath: string) {
|
export function dirname (filepath: string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user