Skip to content

Commit 8960114

Browse files
committed
If defaults + named exports are detected, only export default and prune named. Enable pure properties for tree-shaking (since they're already enabled for uglify)
1 parent d52bd6c commit 8960114

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@
5151
"rollup-plugin-flow": "^1.1.1",
5252
"rollup-plugin-node-resolve": "^3.0.2",
5353
"rollup-plugin-nodent": "^0.1.3",
54-
"rollup-plugin-post-replace": "^1.0.0",
5554
"rollup-plugin-postcss": "^1.1.0",
5655
"rollup-plugin-preserve-shebang": "^0.1.4",
5756
"rollup-plugin-sizes": "^0.4.2",
57+
"rollup-plugin-strict-alias": "^1.0.0",
5858
"rollup-plugin-uglify": "^2.0.1",
5959
"sade": "^1.3.1",
6060
"uglify-es": "^3.3.6"

src/index.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import nodeResolve from 'rollup-plugin-node-resolve';
1212
import buble from 'rollup-plugin-buble';
1313
import uglify from 'rollup-plugin-uglify';
1414
import postcss from 'rollup-plugin-postcss';
15-
// import replace from 'rollup-plugin-post-replace';
16-
import es3 from 'rollup-plugin-es3';
15+
import alias from 'rollup-plugin-strict-alias';
1716
import gzipSize from 'gzip-size';
1817
import prettyBytes from 'pretty-bytes';
1918
import shebangPlugin from 'rollup-plugin-preserve-shebang';
@@ -176,11 +175,25 @@ function createConfig(options, entry, format, writeMeta) {
176175
let nameCache = {};
177176
let mangleOptions = options.pkg.mangle || false;
178177

178+
let exportType;
179+
if (format!='es') {
180+
try {
181+
let file = fs.readFileSync(entry, 'utf-8');
182+
let hasDefault = /\bexport\s*default\s*[a-zA-Z_$]/.test(file);
183+
let hasNamed = /\bexport\s*(let|const|var|async|function\*?)\s*[a-zA-Z_$*]/.test(file) || /^\s*export\s*\{/m.test(file);
184+
if (hasDefault && hasNamed) exportType = 'default';
185+
}
186+
catch (e) {}
187+
}
188+
179189
let config = {
180190
inputOptions: {
181-
input: entry,
191+
input: exportType ? resolve(__dirname, '../src/lib/__entry__.js') : entry,
182192
external,
183193
plugins: [].concat(
194+
alias({
195+
__microbundle_entry__: entry
196+
}),
184197
postcss({
185198
plugins: [
186199
autoprefixer()
@@ -220,7 +233,6 @@ function createConfig(options, entry, format, writeMeta) {
220233
jsnext: true,
221234
browser: options.target!=='node'
222235
}),
223-
es3(),
224236
// We should upstream this to rollup
225237
// format==='cjs' && replace({
226238
// [`module.exports = ${rollupName};`]: '',
@@ -269,10 +281,16 @@ function createConfig(options, entry, format, writeMeta) {
269281
},
270282

271283
outputOptions: {
284+
exports: exportType ? 'default' : undefined,
272285
paths: aliases,
273286
globals,
274287
strict: options.strict===true,
288+
legacy: true,
289+
freeze: false,
275290
sourcemap: true,
291+
treeshake: {
292+
propertyReadSideEffects: false
293+
},
276294
format,
277295
name: options.name || pkg.amdName || safeVariableName(pkg.name),
278296
file: resolve(options.cwd, (format==='es' && moduleMain) || (format==='umd' && umdMain) || cjsMain)

src/lib/__entry__.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from '__microbundle_entry__';

0 commit comments

Comments
 (0)