Skip to content

Commit d7c7f98

Browse files
zigomiryyx990803
authored andcommitted
feat(esm build): build ES modules for browser (#1533)
1 parent 3f87e0a commit d7c7f98

File tree

4 files changed

+53
-11
lines changed

4 files changed

+53
-11
lines changed

build/build.main.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const fs = require('fs')
22
const path = require('path')
33
const zlib = require('zlib')
4-
const uglify = require('uglify-js')
4+
const terser = require('terser')
55
const rollup = require('rollup')
66
const configs = require('./configs')
77

@@ -27,21 +27,24 @@ function build (builds) {
2727
}
2828

2929
function buildEntry ({ input, output }) {
30-
const isProd = /min\.js$/.test(output.file)
30+
const { file, banner } = output
31+
const isProd = /min\.js$/.test(file)
3132
return rollup.rollup(input)
3233
.then(bundle => bundle.generate(output))
3334
.then(({ output: [{ code }] }) => {
3435
if (isProd) {
35-
var minified = (output.banner ? output.banner + '\n' : '') + uglify.minify(code, {
36+
const minified = (banner ? banner + '\n' : '') + terser.minify(code, {
37+
toplevel: true,
3638
output: {
37-
/* eslint-disable camelcase */
3839
ascii_only: true
39-
/* eslint-enable camelcase */
40+
},
41+
compress: {
42+
pure_funcs: ['makeMap']
4043
}
4144
}).code
42-
return write(output.file, minified, true)
45+
return write(file, minified, true)
4346
} else {
44-
return write(output.file, code)
47+
return write(file, code)
4548
}
4649
})
4750
}

build/configs.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,20 @@ const configs = {
3333
input: resolve('src/index.esm.js'),
3434
file: resolve('dist/vuex.esm.js'),
3535
format: 'es'
36+
},
37+
'esm-browser-dev': {
38+
input: resolve('src/index.esm.js'),
39+
file: resolve('dist/vuex.esm.browser.js'),
40+
format: 'es',
41+
env: 'development',
42+
transpile: false
43+
},
44+
'esm-browser-prod': {
45+
input: resolve('src/index.esm.js'),
46+
file: resolve('dist/vuex.esm.browser.min.js'),
47+
format: 'es',
48+
env: 'production',
49+
transpile: false
3650
}
3751
}
3852

@@ -43,8 +57,7 @@ function genConfig (opts) {
4357
plugins: [
4458
replace({
4559
__VERSION__: version
46-
}),
47-
buble()
60+
})
4861
]
4962
},
5063
output: {
@@ -61,6 +74,10 @@ function genConfig (opts) {
6174
}))
6275
}
6376

77+
if (opts.transpile !== false) {
78+
config.input.plugins.push(buble())
79+
}
80+
6481
return config
6582
}
6683

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@
6161
"rollup-plugin-buble": "^0.19.6",
6262
"rollup-plugin-replace": "^2.1.0",
6363
"selenium-server": "^2.53.1",
64+
"terser": "^3.17.0",
6465
"todomvc-app-css": "^2.1.0",
6566
"typescript": "^3.2.2",
66-
"uglify-js": "^3.1.2",
6767
"vue": "^2.5.22",
6868
"vue-loader": "^15.2.1",
6969
"vue-template-compiler": "^2.5.22",

yarn.lock

+23-1
Original file line numberDiff line numberDiff line change
@@ -2729,6 +2729,11 @@ commander@^2.15.1:
27292729
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
27302730
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
27312731

2732+
commander@^2.19.0:
2733+
version "2.20.0"
2734+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
2735+
integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
2736+
27322737
common-tags@^1.4.0:
27332738
version "1.8.0"
27342739
resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
@@ -8406,6 +8411,14 @@ source-map-support@^0.4.15:
84068411
dependencies:
84078412
source-map "^0.5.6"
84088413

8414+
source-map-support@~0.5.10:
8415+
version "0.5.12"
8416+
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
8417+
integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
8418+
dependencies:
8419+
buffer-from "^1.0.0"
8420+
source-map "^0.6.0"
8421+
84098422
source-map-support@~0.5.6:
84108423
version "0.5.10"
84118424
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
@@ -8825,6 +8838,15 @@ terser-webpack-plugin@^1.1.0:
88258838
webpack-sources "^1.1.0"
88268839
worker-farm "^1.5.2"
88278840

8841+
terser@^3.17.0:
8842+
version "3.17.0"
8843+
resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2"
8844+
integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==
8845+
dependencies:
8846+
commander "^2.19.0"
8847+
source-map "~0.6.1"
8848+
source-map-support "~0.5.10"
8849+
88288850
terser@^3.8.1:
88298851
version "3.14.1"
88308852
resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32"
@@ -9057,7 +9079,7 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
90579079
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376"
90589080
integrity sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==
90599081

9060-
[email protected], uglify-js@^3.1.2:
9082+
90619083
version "3.4.9"
90629084
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
90639085
integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==

0 commit comments

Comments
 (0)