1
- import { existsSync , readFileSync } from 'fs'
2
- import { join } from 'path'
1
+ import { existsSync , readFileSync } from 'node: fs'
2
+ import { join } from 'node: path'
3
3
import type { Plugin } from 'vite'
4
4
5
5
interface UserOptions {
@@ -9,6 +9,10 @@ interface UserOptions {
9
9
useFile : string ,
10
10
}
11
11
12
+ const parseFile = ( file : string ) => {
13
+ return JSON . parse ( readFileSync ( file ) . toString ( ) )
14
+ }
15
+
12
16
export const externalizeDeps = ( options : Partial < UserOptions > = { } ) : Plugin => {
13
17
const optionsResolved : UserOptions = {
14
18
deps : true ,
@@ -24,7 +28,7 @@ export const externalizeDeps = (options: Partial<UserOptions> = {}): Plugin => {
24
28
config : ( _config , _env ) => {
25
29
if ( existsSync ( optionsResolved . useFile ) ) {
26
30
const externalDeps = new Set < RegExp > ( )
27
- const { dependencies = { } , peerDependencies = { } } = JSON . parse ( readFileSync ( optionsResolved . useFile ) . toString ( ) )
31
+ const { dependencies = { } , optionalDependencies = { } , peerDependencies = { } } = parseFile ( optionsResolved . useFile )
28
32
29
33
if ( optionsResolved . deps ) {
30
34
Object . keys ( dependencies ) . forEach ( ( dep ) => {
@@ -34,6 +38,14 @@ export const externalizeDeps = (options: Partial<UserOptions> = {}): Plugin => {
34
38
} )
35
39
}
36
40
41
+ if ( optionsResolved . optionalDeps ) {
42
+ Object . keys ( optionalDependencies ) . forEach ( ( dep ) => {
43
+ const depMatcher = new RegExp ( `^${ dep } (?:/.+)?$` )
44
+
45
+ externalDeps . add ( depMatcher )
46
+ } )
47
+ }
48
+
37
49
if ( optionsResolved . peerDeps ) {
38
50
Object . keys ( peerDependencies ) . forEach ( ( dep ) => {
39
51
const depMatcher = new RegExp ( `^${ dep } (?:/.+)?$` )
0 commit comments