@@ -97,41 +97,65 @@ function getExternals (api, pluginOptions) {
97
97
const { dependencies } = require ( api . resolve ( './package.json' ) )
98
98
const externalsList = Object . keys ( dependencies || { } ) . reduce (
99
99
( depList , dep ) => {
100
- // Return true if we want to add a dependency to externals
101
100
try {
102
- let pgkString
103
- for ( const path of nodeModulesPaths ) {
104
- // Check if package.json exists
105
- if ( fs . existsSync ( api . resolve ( `${ path } /${ dep } /package.json` ) ) ) {
106
- // If it does, read it and break
107
- pgkString = fs
108
- . readFileSync ( api . resolve ( `${ path } /${ dep } /package.json` ) )
109
- . toString ( )
110
- break
101
+ if ( process . env . VCPEB_EXPERIMENTAL_NATIVE_DEP_CHECK ) {
102
+ // If dep is in whitelist, don't add it no matter what
103
+ if ( userExternalsWhitelist . includes ( dep ) ) {
104
+ return depList
105
+ }
106
+ const name = userExternals . find ( ( name ) =>
107
+ new RegExp ( `^${ dep } (/|$)` ) . test ( name )
108
+ )
109
+ // If dep is listed in user external array, it is an external
110
+ if ( name ) {
111
+ // Use user-provided name if it exists to support subpaths
112
+ depList . push ( name || dep )
113
+ return depList
114
+ }
115
+ for ( const path of nodeModulesPaths ) {
116
+ // Check if binding.gyp exists
117
+ if ( fs . existsSync ( api . resolve ( `${ path } /${ dep } /binding.gyp` ) ) ) {
118
+ // If it does, dep is native
119
+ // Use user-provided name if it exists to support subpaths
120
+ depList . push ( name || dep )
121
+ return depList
122
+ }
123
+ }
124
+ } else {
125
+ let pgkString
126
+ for ( const path of nodeModulesPaths ) {
127
+ // Check if package.json exists
128
+ if ( fs . existsSync ( api . resolve ( `${ path } /${ dep } /package.json` ) ) ) {
129
+ // If it does, read it and break
130
+ pgkString = fs
131
+ . readFileSync ( api . resolve ( `${ path } /${ dep } /package.json` ) )
132
+ . toString ( )
133
+ break
134
+ }
135
+ }
136
+ if ( ! pgkString ) {
137
+ throw new Error ( `Could not find a package.json for module ${ dep } ` )
138
+ }
139
+ const pkg = JSON . parse ( pgkString )
140
+ const name = userExternals . find ( ( name ) =>
141
+ new RegExp ( `^${ pkg . name } (/|$)` ) . test ( name )
142
+ )
143
+ const fields = [ 'main' , 'module' , 'jsnext:main' , 'browser' ]
144
+ if (
145
+ // Not whitelisted
146
+ userExternalsWhitelist . indexOf ( dep ) === - 1 &&
147
+ // Doesn't have main property
148
+ ( ! fields . some ( ( field ) => field in pkg ) ||
149
+ // Has binary property
150
+ ! ! pkg . binary ||
151
+ // Has gypfile property
152
+ ! ! pkg . gypfile ||
153
+ // Listed in user-defined externals list
154
+ ! ! name )
155
+ ) {
156
+ // Use user-provided name if it exists, for subpaths
157
+ depList . push ( name || dep )
111
158
}
112
- }
113
- if ( ! pgkString ) {
114
- throw new Error ( `Could not find a package.json for module ${ dep } ` )
115
- }
116
- const pkg = JSON . parse ( pgkString )
117
- const name = userExternals . find ( ( name ) =>
118
- new RegExp ( `^${ pkg . name } (/|$)` ) . test ( name )
119
- )
120
- const fields = [ 'main' , 'module' , 'jsnext:main' , 'browser' ]
121
- if (
122
- // Not whitelisted
123
- userExternalsWhitelist . indexOf ( dep ) === - 1 &&
124
- // Doesn't have main property
125
- ( ! fields . some ( ( field ) => field in pkg ) ||
126
- // Has binary property
127
- ! ! pkg . binary ||
128
- // Has gypfile property
129
- ! ! pkg . gypfile ||
130
- // Listed in user-defined externals list
131
- ! ! name )
132
- ) {
133
- // Use user-provided name if it exists, for subpaths
134
- depList . push ( name || dep )
135
159
}
136
160
} catch ( e ) {
137
161
console . log ( e )
0 commit comments