File tree Expand file tree Collapse file tree 2 files changed +47
-0
lines changed
packages/vite/src/node/plugins Expand file tree Collapse file tree 2 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ import { dynamicImportPolyfillPlugin } from './dynamicImportPolyfill'
1414import { webWorkerPlugin } from './worker'
1515import { preAliasPlugin } from './preAlias'
1616import { definePlugin } from './define'
17+ import { ssrRequireHookPlugin } from './ssrRequireHook'
1718
1819export async function resolvePlugins (
1920 config : ResolvedConfig ,
@@ -40,6 +41,7 @@ export async function resolvePlugins(
4041 ssrTarget : config . ssr ?. target ,
4142 asSrc : true
4243 } ) ,
44+ config . ssr ? ssrRequireHookPlugin ( config ) : null ,
4345 htmlInlineScriptProxyPlugin ( ) ,
4446 cssPlugin ( config ) ,
4547 config . esbuild !== false ? esbuildPlugin ( config . esbuild ) : null ,
Original file line number Diff line number Diff line change 1+ import MagicString from 'magic-string'
2+ import { ResolvedConfig } from '..'
3+ import { Plugin } from '../plugin'
4+
5+ const impl = `;(function() {
6+ const Module = require("module")
7+ const resolveFilename = Module._resolveFilename
8+ const dedupe = DEDUPE_IDS
9+ Module._resolveFilename = function (request, parent, isMain, options) {
10+ if (request[0] !== "." && request[0] !== "/") {
11+ const parts = request.split("/")
12+ const pkgName = parts[0][0] === "@" ? parts[0] + "/" + parts[1] : parts[0]
13+ if (dedupe.includes(pkgName)) {
14+ // Use this module as the parent.
15+ parent = module
16+ }
17+ }
18+ return resolveFilename(request, parent, isMain, options)
19+ }
20+ })();
21+ `
22+
23+ export function ssrRequireHookPlugin ( config : ResolvedConfig ) : Plugin | null {
24+ if ( config . command !== 'build' || ! config . resolve . dedupe ?. length ) {
25+ return null
26+ }
27+ return {
28+ name : 'vite:ssr-require-hook' ,
29+ transform ( code , id ) {
30+ const moduleInfo = this . getModuleInfo ( id )
31+ if ( moduleInfo ?. isEntry ) {
32+ const s = new MagicString ( code )
33+ s . prepend (
34+ impl . replace ( 'DEDUPE_IDS' , JSON . stringify ( config . resolve . dedupe ) )
35+ )
36+ return {
37+ code : s . toString ( ) ,
38+ map : s . generateMap ( {
39+ source : id
40+ } )
41+ }
42+ }
43+ }
44+ }
45+ }
You can’t perform that action at this time.
0 commit comments