diff --git a/.github/workflows/node-windows.yml b/.github/workflows/node-windows.yml index 9967e4fb9..61929378a 100644 --- a/.github/workflows/node-windows.yml +++ b/.github/workflows/node-windows.yml @@ -36,7 +36,7 @@ jobs: node-version: ${{ matrix.node }} - name: install pnpm - run: npm install pnpm -g + run: npm install pnpm@6 -g - name: pnpm install run: pnpm install --ignore-scripts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6f7a56e75..5d577e944 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -43,7 +43,7 @@ jobs: - name: Install pnpm run: | - npm install pnpm -g; + npm install pnpm@6 -g; echo node `pnpm -v`; - name: Set Git Config diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 95f0d4744..27d51c873 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -34,7 +34,7 @@ jobs: run: git branch -f master origin/master - name: Install pnpm - run: npm install pnpm -g + run: npm install pnpm@6 -g - name: Sanity Check run: | diff --git a/packages/node-resolve/src/index.js b/packages/node-resolve/src/index.js index 8daafcffe..f9895be3c 100644 --- a/packages/node-resolve/src/index.js +++ b/packages/node-resolve/src/index.js @@ -281,6 +281,11 @@ export function nodeResolve(opts = {}) { if (resolvedResolved.external) { return false; } + // Allow other plugins to take over resolution. Rollup core will not + // change the id if it corresponds to an existing file + if (resolvedResolved.id !== resolved.id) { + return resolvedResolved; + } // Pass on meta information added by other plugins return { ...resolved, meta: resolvedResolved.meta }; } diff --git a/packages/node-resolve/test/test.js b/packages/node-resolve/test/test.js index 50cbcac82..9c08ce211 100755 --- a/packages/node-resolve/test/test.js +++ b/packages/node-resolve/test/test.js @@ -1,4 +1,4 @@ -import { join, resolve } from 'path'; +import { join, resolve, dirname } from 'path'; import test from 'ava'; import { rollup } from 'rollup'; @@ -581,3 +581,31 @@ test('passes on meta information from other plugins', async (t) => { ] }); }); + +test('allow other plugins to take over resolution', async (t) => { + await rollup({ + input: 'entry/main.js', + onwarn: failOnWarn(t), + plugins: [ + nodeResolve(), + { + name: 'change-resolution', + resolveId(importee) { + if (importee.endsWith('main.js')) { + return { + id: join(dirname(importee), 'other.js'), + meta: { 'change-resolution': 'changed' } + }; + } + return null; + }, + + load(id) { + const info = this.getModuleInfo(id); + t.is(info.id, join(__dirname, 'fixtures', 'entry', 'other.js')); + t.deepEqual(info.meta, { 'change-resolution': 'changed' }); + } + } + ] + }); +});