@@ -2,11 +2,17 @@ const Path = require('path');
2
2
const zlib = require ( 'zlib' )
3
3
const fs = require ( 'fs' ) ;
4
4
5
+ const browserslist = require ( "browserslist" ) ;
6
+
5
7
const Webpack = require ( 'webpack' ) ;
6
8
const TerserPlugin = require ( 'terser-webpack-plugin' ) ;
7
9
const { BundleAnalyzerPlugin } = require ( 'webpack-bundle-analyzer' ) ;
8
10
const DuplicatePackageCheckerPlugin = require ( 'duplicate-package-checker-webpack-plugin' ) ;
9
11
const CompressionPlugin = require ( 'compression-webpack-plugin' ) ;
12
+ const basicIdentifierReplacerPlugin = require ( './basicIdentifierReplacerPlugin.js' ) ;
13
+ const requiredBabelPluginsNamesByBrowserTarget = require ( './requiredBabelPluginsNamesByBrowserTarget.js' ) ;
14
+
15
+
10
16
const dts = require ( 'dts-bundle' ) ;
11
17
12
18
class DtsBundlePlugin {
@@ -46,7 +52,8 @@ class DtsBundlePlugin {
46
52
}
47
53
48
54
// doc: https://github.com/Nyalab/caniuse-api#api
49
- const caniuse = require ( 'caniuse-api' )
55
+ //const caniuse = require('caniuse-api')
56
+ const caniuse = require ( './caniuse-isSupported.js' )
50
57
51
58
const pkg = require ( '../package.json' ) ;
52
59
@@ -83,11 +90,23 @@ const configure = ({name, vueTarget, libraryTargetModule}) => (env = {}, { mode
83
90
84
91
const genSourcemap = false ;
85
92
93
+ let actualTargetsBrowsers = targetsBrowsers ;
94
+
95
+ // "or" / ","" -> union
96
+ // "and" -> intersection
97
+ // "not" -> relative complement
98
+
86
99
// excludes cases that make no sense
87
- const actualTargetsBrowsers = targetsBrowsers + ( libraryTargetModule ? ' and supports es6-module' : '' ) + ( vueTarget == 3 ? ' and supports proxy' : '' ) ;
100
+ actualTargetsBrowsers += ( libraryTargetModule ? ' and supports es6-module' : '' ) + ( vueTarget == 3 ? ' and supports proxy' : '' ) ;
88
101
89
102
console . log ( 'config' , { actualTargetsBrowsers, noPresetEnv, noCompress, noSourceMap, genSourcemap, libraryTargetModule, vueTarget } ) ;
90
103
104
+ if ( browserslist ( actualTargetsBrowsers ) . length === 0 )
105
+ throw new RangeError ( 'browserslist(' + actualTargetsBrowsers + ') selects no browsers' ) ;
106
+
107
+ const pluginNameList = requiredBabelPluginsNamesByBrowserTarget ( actualTargetsBrowsers ) ;
108
+ const ___targetBrowserBabelPlugins = '{' + pluginNameList . map ( e => `'${ e } ': require('@babel/plugin-${ e } '),\n` ) . join ( '' ) + '}' ;
109
+
91
110
return {
92
111
name,
93
112
@@ -346,8 +365,8 @@ ${ pkg.name } v${ pkg.version } for vue${ vueTarget }
346
365
isProd ? {
347
366
test : / \. ( m j s | j s | c j s | t s ) $ / ,
348
367
exclude : [
349
- / c o r e - j s - p u r e / , // Babel should not transpile core-js for correct work.
350
- / r e g e n e r a t o r - r u n t i m e / , // transpile not needed
368
+ / [ \\ / ] r e g e n e r a t o r - r u n t i m e [ \\ / ] / , // transpile not needed
369
+ / [ \\ / ] c o r e - j s ( | - p u r e ) [ \\ / ] / , // Babel should not transpile core-js for correct work.
351
370
] ,
352
371
use : {
353
372
loader : 'babel-loader' ,
@@ -360,8 +379,7 @@ ${ pkg.name } v${ pkg.version } for vue${ vueTarget }
360
379
361
380
...! noPresetEnv ? [
362
381
[
363
- '@babel/preset-env' ,
364
- {
382
+ '@babel/preset-env' , {
365
383
}
366
384
]
367
385
] : [ ] ,
@@ -370,15 +388,22 @@ ${ pkg.name } v${ pkg.version } for vue${ vueTarget }
370
388
371
389
...! noPresetEnv ? [
372
390
[
373
- "polyfill-corejs3" ,
374
- {
375
- "method" : "usage-pure"
391
+ basicIdentifierReplacerPlugin , {
392
+ ___targetBrowserBabelPlugins
393
+ }
394
+ ] ,
395
+
396
+ [
397
+ 'polyfill-corejs3' , {
398
+ // Allow global scope pollution with polyfills required by actualTargetsBrowsers.
399
+ // This is necessary because the code compiled by vue3-sfc-loader also require these polyfills.
400
+ 'method' : 'entry-global'
376
401
}
377
402
] ,
403
+
378
404
[
379
- 'babel-plugin-polyfill-regenerator' ,
380
- {
381
- "method" : "usage-pure"
405
+ 'polyfill-regenerator' , {
406
+ 'method' : 'usage-pure'
382
407
}
383
408
]
384
409
] : [ ] ,
0 commit comments