{{ msg }}
+ + + 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"