diff --git a/packages/node-resolve/package.json b/packages/node-resolve/package.json index 181c2880b..74c7c1658 100644 --- a/packages/node-resolve/package.json +++ b/packages/node-resolve/package.json @@ -57,8 +57,8 @@ "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.19.0" }, diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 3eab84bfe..c3a650e3e 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -1,7 +1,7 @@ /* eslint-disable no-param-reassign, no-shadow, no-undefined */ import { dirname, normalize, resolve, sep } from 'path'; -import builtinList from 'builtin-modules'; +import isBuiltinModule from 'is-builtin-module'; import deepMerge from 'deepmerge'; import isModule from 'is-module'; @@ -13,7 +13,6 @@ import { fileExists, readFile, realpath } from './fs'; import resolveImportSpecifiers from './resolveImportSpecifiers'; import { getMainFields, getPackageName, normalizeInput } from './util'; -const builtins = new Set(builtinList); const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; const deepFreeze = (object) => { Object.freeze(object); @@ -166,7 +165,7 @@ export function nodeResolve(opts = {}) { ignoreSideEffectsForRoot }); - const importeeIsBuiltin = builtins.has(importee); + const importeeIsBuiltin = isBuiltinModule(importee); const resolved = importeeIsBuiltin && preferBuiltins ? { diff --git a/packages/node-resolve/test/fixtures/node-protocol.js b/packages/node-resolve/test/fixtures/node-protocol.js new file mode 100644 index 000000000..75bfd5a9c --- /dev/null +++ b/packages/node-resolve/test/fixtures/node-protocol.js @@ -0,0 +1 @@ +import 'node:fs'; diff --git a/packages/node-resolve/test/prefer-builtins.js b/packages/node-resolve/test/prefer-builtins.js index 5c78ea4f5..8cd3715a7 100644 --- a/packages/node-resolve/test/prefer-builtins.js +++ b/packages/node-resolve/test/prefer-builtins.js @@ -103,3 +103,16 @@ test('does not warn when using a builtin module when there is no local version, t.is(warning, null); }); + +test('detects builtins imported with node: protocol', async (t) => { + const warnings = []; + await rollup({ + input: 'node-protocol.js', + onwarn({ message }) { + warnings.push(message); + }, + plugins: [nodeResolve()] + }); + + t.is(warnings.length, 0); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7da67e89e..cafe6db70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,18 +99,6 @@ importers: rollup: 2.67.3 typescript: 4.1.2 - packages/auto-install/test/fixtures/pnpm: - specifiers: - node-noop: ^1.0.0 - dependencies: - node-noop: 1.0.0 - - packages/auto-install/test/fixtures/pnpm-bare: - specifiers: - node-noop: ^1.0.0 - dependencies: - node-noop: 1.0.0 - packages/babel: specifiers: '@babel/core': ^7.10.5 @@ -388,9 +376,9 @@ importers: '@rollup/plugin-json': ^4.1.0 '@rollup/pluginutils': ^3.1.0 '@types/resolve': 1.17.1 - builtin-modules: ^3.1.0 deepmerge: ^4.2.2 es5-ext: ^0.10.53 + is-builtin-module: ^3.1.0 is-module: ^1.0.0 resolve: ^1.19.0 rollup: ^2.67.3 @@ -399,8 +387,8 @@ importers: dependencies: '@rollup/pluginutils': 3.1.0_rollup@2.67.3 '@types/resolve': 1.17.1 - builtin-modules: 3.1.0 deepmerge: 4.2.2 + is-builtin-module: 3.1.0 is-module: 1.0.0 resolve: 1.19.0 devDependencies: @@ -5300,6 +5288,13 @@ packages: call-bind: 1.0.2 dev: true + /is-builtin-module/3.1.0: + resolution: {integrity: sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.1.0 + dev: false + /is-callable/1.2.2: resolution: {integrity: sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==} engines: {node: '>= 0.4'} @@ -6181,6 +6176,7 @@ packages: /node-noop/1.0.0: resolution: {integrity: sha1-R6Pn2Az/qmRYNkvSLthcqzMHvnk=} + dev: true /node-preload/0.2.1: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==}