feat: setup universal browser and node builds

In this diff I fixed es modules distribution for bundlers.

Before we had two problems
- bundlers use "module" field to find es module build
- bundlers cannot use provided es module with node target

In this diff I addressed both of them. Now "main" and "module" fields
points to "node" specific versions. "browser" field provides aliases
with browser compatible builds.

All modern browsers support both "module" and "browser" fields.
This commit is contained in:
Bogdan Chadkin
2020-06-25 13:30:56 +03:00
parent 04873a4e9c
commit 6cf6ffae90
3 changed files with 44 additions and 18 deletions
+8 -4
View File
@@ -2,9 +2,13 @@
"name": "liquidjs", "name": "liquidjs",
"version": "9.13.0", "version": "9.13.0",
"description": "A simple, expressive, safe and Shopify compatible template engine in pure JavaScript.", "description": "A simple, expressive, safe and Shopify compatible template engine in pure JavaScript.",
"main": "dist/liquid.cjs.js", "main": "dist/liquid.node.cjs.js",
"es2015": "dist/liquid.esm.js", "module": "dist/liquid.node.esm.js",
"browser": "dist/liquid.js", "es2015": "dist/liquid.browser.esm.js",
"browser": {
"./dist/liquid.node.cjs.js": "./dist/liquid.browser.umd.js",
"./dist/liquid.node.esm.js": "./dist/liquid.browser.esm.js"
},
"types": "dist/liquid.d.ts", "types": "dist/liquid.d.ts",
"scripts": { "scripts": {
"lint": "eslint .", "lint": "eslint .",
@@ -16,7 +20,7 @@
"benchmark": "node --expose-gc benchmark/index", "benchmark": "node --expose-gc benchmark/index",
"coverage": "nyc --reporter=html mocha \"test/{unit,integration}/**/*.ts\"", "coverage": "nyc --reporter=html mocha \"test/{unit,integration}/**/*.ts\"",
"coverage-coveralls": "nyc mocha \"test/{unit,integration}/**/*.ts\" && nyc report --reporter=text-lcov | coveralls", "coverage-coveralls": "nyc mocha \"test/{unit,integration}/**/*.ts\" && nyc report --reporter=text-lcov | coveralls",
"build": "rollup -c rollup.config.ts && ls -lh dist", "build": "rm -rf dist && rollup -c rollup.config.ts && ls -lh dist",
"build-docs": "bin/build-docs.sh", "build-docs": "bin/build-docs.sh",
"watch": "tsc --watch" "watch": "tsc --watch"
}, },
+35 -13
View File
@@ -15,9 +15,9 @@ const treeshake = {
} }
const input = './src/liquid.ts' const input = './src/liquid.ts'
const cjs = { const nodeCjs = {
output: [{ output: [{
file: 'dist/liquid.cjs.js', file: 'dist/liquid.node.cjs.js',
format: 'cjs', format: 'cjs',
banner banner
}], }],
@@ -36,9 +36,31 @@ const cjs = {
input input
} }
const esm = { const nodeEsm = {
output: [{ output: [{
file: 'dist/liquid.esm.js', file: 'dist/liquid.node.esm.js',
format: 'esm',
banner
}],
external: ['path', 'fs'],
plugins: [typescript({
tsconfigOverride: {
include: [ 'src' ],
exclude: [ 'test', 'benchmark' ],
compilerOptions: {
target: 'ES2017',
module: 'ES2015'
}
}
})],
treeshake,
input
}
const browserEsm = {
output: [{
file: 'dist/liquid.browser.esm.js',
format: 'esm', format: 'esm',
banner banner
}], }],
@@ -64,9 +86,9 @@ const esm = {
input input
} }
const umd = { const browserUmd = {
output: [{ output: [{
file: 'dist/liquid.js', file: 'dist/liquid.browser.umd.js',
name: 'liquidjs', name: 'liquidjs',
format: 'umd', format: 'umd',
sourcemap, sourcemap,
@@ -93,9 +115,9 @@ const umd = {
input input
} }
const min = { const browserMin = {
output: [{ output: [{
file: 'dist/liquid.min.js', file: 'dist/liquid.browser.min.js',
name: 'liquidjs', name: 'liquidjs',
format: 'umd', format: 'umd',
sourcemap sourcemap
@@ -124,10 +146,10 @@ const min = {
const bundles = [] const bundles = []
const env = process.env.BUNDLES || '' const env = process.env.BUNDLES || ''
if (env.includes('cjs')) bundles.push(cjs) if (env.includes('cjs')) bundles.push(nodeCjs)
if (env.includes('esm')) bundles.push(esm) if (env.includes('esm')) bundles.push(nodeEsm, browserEsm)
if (env.includes('umd')) bundles.push(umd) if (env.includes('umd')) bundles.push(browserUmd)
if (env.includes('min')) bundles.push(min) if (env.includes('min')) bundles.push(browserMin)
if (bundles.length === 0) bundles.push(cjs, umd, min, esm) if (bundles.length === 0) bundles.push(nodeCjs, nodeEsm, browserEsm, browserUmd, browserMin)
export default bundles export default bundles
+1 -1
View File
@@ -1,4 +1,4 @@
import { Liquid } from '../../dist/liquid.js' import { Liquid } from '../../dist/liquid.browser.umd.js'
import * as sinon from 'sinon' import * as sinon from 'sinon'
import { expect, use } from 'chai' import { expect, use } from 'chai'
import { JSDOM } from 'jsdom' import { JSDOM } from 'jsdom'