From 5e0d9de9640c6502adc997b08b2faad438089d05 Mon Sep 17 00:00:00 2001 From: Wesley Luyten Date: Fri, 6 Oct 2023 10:38:25 -0500 Subject: [PATCH] fix: add esbuild global externals plugin --- package.json | 4 ++-- scripts/builder/builder.js | 33 ++++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index ec43c2bb..eb348c14 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ "build:demo": "cp -r examples/react/public demo && npm run build:lib && builder examples/react/src/index.js --format=iife --bundle --outdir=demo --minify --sourcemap", "build:lib": "builder src/*.js src/players/*.js --outdir=lib --format=cjs", "build:lazy": "builder src/*.js src/players/*.js --outdir=lazy --format=cjs", - "build:dist": "builder src/index.js --outfile=dist/ReactPlayer.js --format=iife --bundle --minify --sourcemap --global-name=ReactPlayer --external:react --footer:js=\"ReactPlayer = ReactPlayer.default;\"", - "build:standalone": "builder src/standalone.js --outfile=dist/ReactPlayer.standalone.js --format=iife --bundle --minify --sourcemap --global-name=renderReactPlayer --footer:js=\"renderReactPlayer = renderReactPlayer.default;\"", + "build:dist": "builder src/index.js --outfile=dist/ReactPlayer.js --format=iife --bundle --minify --sourcemap --global-name=ReactPlayer --external:react --plugin:global-externals='{\"react\":\"globalThis.React\"}' --footer:js='ReactPlayer = ReactPlayer.default;'", + "build:standalone": "builder src/standalone.js --outfile=dist/ReactPlayer.standalone.js --format=iife --bundle --minify --sourcemap --global-name=renderReactPlayer --footer:js='renderReactPlayer = renderReactPlayer.default;'", "build:es6": "builder src/standalone.js --outfile=dist/ReactPlayer.standalone.es6.js --format=esm --bundle --minify", "preversion": "npm run lint && npm run test", "version": "auto-changelog -p && npm run build:dist && npm run build:standalone && git add CHANGELOG.md dist", diff --git a/scripts/builder/builder.js b/scripts/builder/builder.js index f93296c5..1f147388 100755 --- a/scripts/builder/builder.js +++ b/scripts/builder/builder.js @@ -22,9 +22,32 @@ export async function cliBuild () { } export async function build (positionals, args) { -// https://esbuild.github.io/api/#live-reload + // https://esbuild.github.io/api/#live-reload const livereloadJs = 'new EventSource(\'/esbuild\').addEventListener(\'change\', () => location.reload());' + // Assigns external modules to global variables. + // https://github.com/evanw/esbuild/issues/337 + const plugins = { + 'global-externals': (arg) => { + const options = JSON.parse(arg) + const filter = new RegExp(`^${Object.keys(options)}$`) + + return { + name: 'global-externals-plugin', + setup (build) { + build.onResolve({ filter }, (args) => ({ + path: args.path, + namespace: 'global-externals-plugin' + })) + build.onLoad({ filter: /.*/, namespace: 'global-externals-plugin' }, (args) => { + const contents = `module.exports = ${options[args.path]}` + return { contents } + }) + } + } + } + } + const options = { logLevel: 'info', entryPoints: positionals, @@ -40,7 +63,8 @@ export async function build (positionals, args) { external: argsArray(args, 'external'), outExtension: argsObject(args, 'out-extension'), banner: argsObject(args, 'banner'), - plugins: [], + plugins: Object.entries(argsObject(args, 'plugin')) + .map(([name, options]) => plugins[name](options)), define: { 'globalThis.__TEST__': 'false', ...argsObject(args, 'define') @@ -56,11 +80,6 @@ export async function build (positionals, args) { } } - if (args.stdin) { - delete options.entryPoints - options.stdin = args.stdin - } - if (process.env.NODE_ENV) { options.define['process.env.NODE_ENV'] ||= `"${process.env.NODE_ENV}"` }