create rollup-plugin-esbuild-resolve

This commit is contained in:
Rene Haas
2022-10-01 12:22:11 +02:00
parent 802bab731b
commit 01d95b638b
6 changed files with 87 additions and 20 deletions
+2 -5
View File
@@ -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 @@
"^~/(.*)": "<rootDir>/src/$1"
}
},
"rollupAlias": {
"^~/(.*)": "<rootDir>/src/$1"
},
"rollupTypes": {
"~/*": ["<typesDir>/*"]
}
+9 -7
View File
@@ -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('<rootDir>', 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
+3 -3
View File
@@ -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,
],
};
+3 -3
View File
@@ -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,
],
};
+2 -2
View File
@@ -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 = () => {
@@ -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 };
},
};
};