Visitar URL original
fix: only treat whole `node_modules` path segments as dependencies (f… · vitejs/vite@ef0dc17 · GitHub
Skip to content

Commit ef0dc17

Browse files
kakiuwang-uibluwy
andauthored
fix: only treat whole node_modules path segments as dependencies (fix #17467) (#23437)
Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com>
1 parent 42a4ea7 commit ef0dc17

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

‎packages/vite/src/node/__tests__/utils.spec.ts‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
getServerUrlByHost,
2121
injectQuery,
2222
isFileReadable,
23+
isInNodeModules,
2324
isParentDirectory,
2425
mergeWithDefaults,
2526
normalizePath,
@@ -83,6 +84,29 @@ describe('bareImportRE', () => {
8384
})
8485
})
8586

87+
describe('isInNodeModules', () => {
88+
test('should detect node_modules path segments', () => {
89+
expect(isInNodeModules('/project/node_modules/foo/index.js')).toBe(true)
90+
expect(isInNodeModules('node_modules/foo/index.js')).toBe(true)
91+
expect(
92+
isInNodeModules(
93+
'/project/node_modules/.pnpm/foo@1/node_modules/foo/i.js',
94+
),
95+
).toBe(true)
96+
expect(isInNodeModules('C:\\project\\node_modules\\foo\\index.js')).toBe(
97+
true,
98+
)
99+
expect(isInNodeModules('/project/node_modules')).toBe(true)
100+
})
101+
102+
test('should not match node_modules as part of a directory name', () => {
103+
expect(isInNodeModules('/project/node_modules_bug/src/main.js')).toBe(false)
104+
expect(isInNodeModules('/project/my_node_modules/src/main.js')).toBe(false)
105+
expect(isInNodeModules('/project/src/node_modules.js')).toBe(false)
106+
expect(isInNodeModules('C:\\node_modules_bug\\src\\main.js')).toBe(false)
107+
})
108+
})
109+
86110
describe('isParentDirectory', () => {
87111
const cases = {
88112
'/parent': {

‎packages/vite/src/node/utils.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,10 @@ export function isNodeBuiltin(id: string): boolean {
137137
return nodeBuiltins.includes(id)
138138
}
139139

140+
const inNodeModulesRE = /(?:^|[\\/])node_modules(?:[\\/]|$)/
141+
140142
export function isInNodeModules(id: string): boolean {
141-
return id.includes('node_modules')
143+
return inNodeModulesRE.test(id)
142144
}
143145

144146
export function moduleListContains(

0 commit comments

Comments
 (0)