diff --git a/local/config/src/resolve.json b/local/config/src/resolve.json index ad6eeb2..0434f70 100644 --- a/local/config/src/resolve.json +++ b/local/config/src/resolve.json @@ -1,6 +1,6 @@ { - "extensions": [".json", ".js", ".jsx", ".cjs", ".mjs", ".ts", ".tsx"], - "styleExtensions": [".scss", ".sass", ".css"], + "extensions": [".tsx", ".ts", ".jsx", ".js", ".json"], + "styleExtensions": [".css", ".scss", ".sass"], "directories": ["node_modules"], "paths": { "jest": { @@ -8,9 +8,6 @@ "^~/(.*)": "/src/$1" } }, - "rollupAlias": { - "^~/(.*)": "/src/$1" - }, "rollupTypes": { "~/*": ["/*"] } diff --git a/local/rollup/src/bundle/plugins.js b/local/rollup/src/bundle/plugins.js index d261929..be14a1d 100644 --- a/local/rollup/src/bundle/plugins.js +++ b/local/rollup/src/bundle/plugins.js @@ -12,6 +12,7 @@ const rollupPluginAlias = require('@rollup/plugin-alias'); const rollupPluginTs = require('rollup-plugin-typescript2'); const rollupPluginLicense = require('rollup-plugin-license'); const rollupPluginEsBuild = require('../plugins/esbuild'); +const rollupPluginEsBuildResolve = require('../plugins/esbuild-resolve'); const babelConfigEs5 = require('./babel.config.es5'); const babelConfigEs6 = require('./babel.config.es2015'); @@ -29,13 +30,6 @@ module.exports = { }); return arr; }, []), - ...Object.entries(resolve.paths.rollupAlias).reduce((arr, [key, value]) => { - arr.push({ - find: new RegExp(key), - replacement: value.replace('', normalizePath(process.cwd())), - }); - return arr; - }, []), ], }), rollupCommonjs: (sourcemap, resolve) => @@ -51,6 +45,14 @@ module.exports = { ignoreSideEffectsForRoot: true, ...(resolveOnly ? { resolveOnly } : {}), }), + rollupEsbuildResolve: (resolve) => + rollupPluginEsBuildResolve({ + esbuild: { + mainFields: ['browser', 'umd:main', 'module', 'main'], + nodePaths: resolve.directories, + resolveExtensions: resolve.extensions, + }, + }), rollupScss: (resolve, sourceMap, extract, output, banner, minified) => { if (extract) { return output diff --git a/local/rollup/src/bundle/script.default.js b/local/rollup/src/bundle/script.default.js index e8c3f28..03b65c2 100644 --- a/local/rollup/src/bundle/script.default.js +++ b/local/rollup/src/bundle/script.default.js @@ -4,7 +4,7 @@ const { rollupBabel, rollupTs, rollupCommonjs, - rollupResolve, + rollupEsbuildResolve, rollupAlias, rollupScss, rollupLicense, @@ -64,12 +64,12 @@ module.exports = (resolve, options) => { ...rollupOptions, plugins: [ rollupLicense(banner, sourcemap), + rollupEsbuildResolve(resolve), rollupAlias(resolve, alias), rollupScss(resolve, sourcemap, extractStyles, false), rollupTs(input), - rollupResolve(resolve), - rollupCommonjs(sourcemap, resolve), rollupBabel(resolve, generatedCode === 'es2015'), + rollupCommonjs(sourcemap, resolve), ...plugins, ], }; diff --git a/local/rollup/src/bundle/script.esbuild.js b/local/rollup/src/bundle/script.esbuild.js index aeb703a..acc8d03 100644 --- a/local/rollup/src/bundle/script.esbuild.js +++ b/local/rollup/src/bundle/script.esbuild.js @@ -2,7 +2,7 @@ const path = require('path'); const { rollupEsBuild, rollupCommonjs, - rollupResolve, + rollupEsbuildResolve, rollupAlias, rollupScss, rollupLicense, @@ -28,12 +28,12 @@ module.exports = (resolve, options) => { output, ...rollupOptions, plugins: [ - rollupLicense(banner, sourcemap), + rollupEsbuildResolve(resolve), rollupAlias(resolve, alias), + rollupLicense(banner, sourcemap), rollupScss(resolve, sourcemap, extractStyles, false), rollupEsBuild(sourcemap), rollupCommonjs(sourcemap, resolve), - rollupResolve(resolve), ...plugins, ], }; diff --git a/local/rollup/src/bundle/styles.js b/local/rollup/src/bundle/styles.js index 1d42898..335ba38 100644 --- a/local/rollup/src/bundle/styles.js +++ b/local/rollup/src/bundle/styles.js @@ -1,5 +1,5 @@ const path = require('path'); -const { rollupAlias, rollupResolve, rollupScss, rollupEsBuild } = require('./plugins'); +const { rollupAlias, rollupEsbuildResolve, rollupScss, rollupEsBuild } = require('./plugins'); module.exports = (resolve, options) => { const { rollup, alias, paths, banner, extractStyles } = options; @@ -17,6 +17,7 @@ module.exports = (resolve, options) => { return !resolve.styleExtensions.find((ext) => id.endsWith(ext)); }, plugins: [ + rollupEsbuildResolve(resolve), rollupAlias(resolve, alias), rollupScss( resolve, @@ -27,7 +28,6 @@ module.exports = (resolve, options) => { minified ), rollupEsBuild(false), - rollupResolve(resolve), { generateBundle() { process.stdout.write = () => { diff --git a/local/rollup/src/plugins/esbuild-resolve.js b/local/rollup/src/plugins/esbuild-resolve.js new file mode 100644 index 0000000..c7fe84e --- /dev/null +++ b/local/rollup/src/plugins/esbuild-resolve.js @@ -0,0 +1,68 @@ +const { dirname } = require('path'); +const { build } = require('esbuild'); + +module.exports = ({ esbuild: esBuildOptions = {} } = {}) => { + let resolver; + let esbuildInstance; + + return { + name: 'esbuild-resolve', + async buildStart() { + if (!esbuildInstance) { + [esbuildInstance, resolver] = await new Promise((resolve) => { + let esBuildResolver; + build({ + ...esBuildOptions, + watch: true, + plugins: [ + { + name: 'resolve-grab', + setup(esbuild) { + esbuild.onStart(() => { + esBuildResolver = esbuild; + }); + }, + }, + ...(esBuildOptions.plugins || []), + ], + }).then((instance) => { + resolve([instance, esBuildResolver]); + }); + }); + } + }, + async buildEnd() { + if (esbuildInstance) { + esbuildInstance.stop(); + esbuildInstance = null; + resolver = null; + } + }, + async resolveId(source, importer, options) { + const { isEntry } = options; + const resolveDir = isEntry || !importer ? dirname(source) : dirname(importer); + const { + path: id, + sideEffects: moduleSideEffects, + external, + errors, + warnings, + } = await resolver.resolve(source, { resolveDir, kind: 'entry-point' }); + + if (errors && errors.length > 0) { + errors.forEach(({ text }) => { + this.error(text); + }); + return null; + } + + if (warnings && warnings.length > 0) { + warnings.forEach(({ text }) => { + this.warn(text); + }); + } + + return { id, external, moduleSideEffects }; + }, + }; +};