From b5ddcdcc65f62bf3fd50e487dc2d9bfa61624539 Mon Sep 17 00:00:00 2001 From: csr632 <632882184@qq.com> Date: Sat, 23 May 2020 21:27:08 +0800 Subject: [PATCH] fix: defaultRequestToFile should consider optimized modules (#239) --- .gitignore | 2 +- package.json | 1 + playground/App.vue | 5 ++++- playground/package.json | 4 +++- .../TestRewriteOptimized.vue | 12 +++++++++++ .../rewrite-optimized/test-package/index.js | 3 +++ .../test-package/package.json | 6 ++++++ .../rewrite-optimized/test-package/util.js | 3 +++ playground/vite.config.ts | 5 ++++- playground/yarn.lock | 15 ++++++++++---- src/node/resolver.ts | 20 ++++++++++++------- test/test.js | 10 +++++++++- yarn.lock | 5 +++++ 13 files changed, 75 insertions(+), 16 deletions(-) create mode 100644 playground/rewrite-optimized/TestRewriteOptimized.vue create mode 100644 playground/rewrite-optimized/test-package/index.js create mode 100644 playground/rewrite-optimized/test-package/package.json create mode 100644 playground/rewrite-optimized/test-package/util.js diff --git a/.gitignore b/.gitignore index e172b06c376581..4d2ac93af737ea 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ dist dist-ssr TODOs.md *.log -test/temp +temp explorations .idea diff --git a/package.json b/package.json index c6053f3210fb05..1f5fb56a83c449 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,7 @@ "jest": "^25.4.0", "lint-staged": "^10.1.6", "lodash-es": "^4.17.15", + "moment": "^2.26.0", "npm-run-all": "^4.1.5", "postcss-nesting": "^7.0.1", "preact": "^10.4.1", diff --git a/playground/App.vue b/playground/App.vue index 34e7f4048cc80a..f57945bd129eed 100644 --- a/playground/App.vue +++ b/playground/App.vue @@ -22,6 +22,7 @@ + diff --git a/playground/package.json b/playground/package.json index 70377007b9203f..3fba5d492222d5 100644 --- a/playground/package.json +++ b/playground/package.json @@ -5,6 +5,8 @@ "serve": "serve dist" }, "dependencies": { - "lodash-es": "^4.17.15" + "lodash-es": "link:../node_modules/lodash-es", + "moment": "link:../node_modules/moment", + "rewrite-optimized-test-package": "link:./rewrite-optimized/test-package" } } diff --git a/playground/rewrite-optimized/TestRewriteOptimized.vue b/playground/rewrite-optimized/TestRewriteOptimized.vue new file mode 100644 index 00000000000000..ea2043d9cc1b5a --- /dev/null +++ b/playground/rewrite-optimized/TestRewriteOptimized.vue @@ -0,0 +1,12 @@ + + + diff --git a/playground/rewrite-optimized/test-package/index.js b/playground/rewrite-optimized/test-package/index.js new file mode 100644 index 00000000000000..24485a25409838 --- /dev/null +++ b/playground/rewrite-optimized/test-package/index.js @@ -0,0 +1,3 @@ +import { util } from './util' + +export default util diff --git a/playground/rewrite-optimized/test-package/package.json b/playground/rewrite-optimized/test-package/package.json new file mode 100644 index 00000000000000..d7b1cc121c2d20 --- /dev/null +++ b/playground/rewrite-optimized/test-package/package.json @@ -0,0 +1,6 @@ +{ + "name": "rewrite-optimized-test-package", + "version": "1.0.0", + "main": "index.js", + "license": "MIT" +} diff --git a/playground/rewrite-optimized/test-package/util.js b/playground/rewrite-optimized/test-package/util.js new file mode 100644 index 00000000000000..ffb6fcdfa6b768 --- /dev/null +++ b/playground/rewrite-optimized/test-package/util.js @@ -0,0 +1,3 @@ +import moment from 'moment' + +export const util = moment diff --git a/playground/vite.config.ts b/playground/vite.config.ts index 7cf7c38498775a..8a0bb5269a712f 100644 --- a/playground/vite.config.ts +++ b/playground/vite.config.ts @@ -8,7 +8,10 @@ const config: UserConfig = { jsx: 'preact', minify: false, serviceWorker: !!process.env.USE_SW, - plugins: [jsPlugin] + plugins: [jsPlugin], + optimizeDeps: { + commonJSWhitelist: ['moment'] + } } export default config diff --git a/playground/yarn.lock b/playground/yarn.lock index 31db46f3d5eabf..b8fda313986c50 100644 --- a/playground/yarn.lock +++ b/playground/yarn.lock @@ -2,7 +2,14 @@ # yarn lockfile v1 -lodash-es@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" - integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== +"lodash-es@link:../node_modules/lodash-es": + version "0.0.0" + uid "" + +"moment@link:../node_modules/moment": + version "0.0.0" + uid "" + +"rewrite-optimized-test-package@link:./rewrite-optimized/test-package": + version "0.0.0" + uid "" diff --git a/src/node/resolver.ts b/src/node/resolver.ts index 472aa5c943755e..e804d6e45d22dc 100644 --- a/src/node/resolver.ts +++ b/src/node/resolver.ts @@ -25,14 +25,20 @@ export interface InternalResolver { const defaultRequestToFile = (publicPath: string, root: string): string => { if (moduleRE.test(publicPath)) { const id = publicPath.replace(moduleRE, '') - const cachedModuleFilePath = idToFileMap.get(id) - if (cachedModuleFilePath) { - return cachedModuleFilePath + // try to resolve from optimized modules + const optimizedModule = resolveOptimizedModule(root, id) + if (optimizedModule) { + return optimizedModule } - const resolved = resolveNodeModuleFile(root, id) - if (resolved) { - idToFileMap.set(id, resolved) - return resolved + // try to resolve from normal node_modules + const cachedNodeModule = idToFileMap.get(id) + if (cachedNodeModule) { + return cachedNodeModule + } + const nodeModule = resolveNodeModuleFile(root, id) + if (nodeModule) { + idToFileMap.set(id, nodeModule) + return nodeModule } } return path.join(root, publicPath.slice(1)) diff --git a/test/test.js b/test/test.js index 4214590cedbc9b..e957a57f1fcbad 100644 --- a/test/test.js +++ b/test/test.js @@ -2,6 +2,7 @@ const fs = require('fs-extra') const path = require('path') const execa = require('execa') const puppeteer = require('puppeteer') +const moment = require('moment') jest.setTimeout(100000) @@ -9,7 +10,7 @@ const timeout = (n) => new Promise((r) => setTimeout(r, n)) const binPath = path.resolve(__dirname, '../bin/vite.js') const fixtureDir = path.join(__dirname, '../playground') -const tempDir = path.join(__dirname, 'temp') +const tempDir = path.join(__dirname, '../temp') let devServer let browser let page @@ -46,6 +47,7 @@ beforeAll(async () => { await fs.copy(fixtureDir, tempDir, { filter: (file) => !/dist|node_modules/.test(file) }) + await execa('yarn', { cwd: tempDir }) }) afterAll(async () => { @@ -352,6 +354,12 @@ describe('vite', () => { await expectByPolling(() => getText('.async'), 'should show up') expect(await getComputedColor('.async')).toBe('rgb(139, 69, 19)') }) + + test('rewrite import in optimized deps', async () => { + expect(await getText('.test-rewrite-in-optimized')).toMatch( + moment(1590231082886).format('MMMM Do YYYY, h:mm:ss a') + ) + }) } // test build first since we are going to edit the fixtures when testing dev diff --git a/yarn.lock b/yarn.lock index ab0c48c2886756..86bf7c584e5b28 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4802,6 +4802,11 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +moment@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" + integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"