-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathrollup.config.js
More file actions
101 lines (97 loc) · 2.29 KB
/
Copy pathrollup.config.js
File metadata and controls
101 lines (97 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import json from "@rollup/plugin-json";
import polyfillNode from "rollup-plugin-polyfill-node";
import { babel as rollupBabel } from '@rollup/plugin-babel';
import fs from 'fs';
import path from 'path';
const packageJson = JSON.parse(fs.readFileSync(path.resolve('./package.json'), 'utf-8'));
// optionalDependencies 也必须 external:keccak 是原生 addon,一旦被内联进 bundle,
// 它内部 node-gyp-build 的 __dirname 就指向 bundle 目录,找不到 .node 而静默退回纯 JS。
const externalDeps = [
...Object.keys(packageJson.dependencies || {}),
...Object.keys(packageJson.optionalDependencies || {}),
...Object.keys(packageJson.peerDependencies || {})
];
const nodeConfig = {
input: [
"src/index.node.js",
"src/utils.js"
],
plugins: [
resolve({
browser: false,
preferBuiltins: true,
exportConditions: ['node', 'default']
}),
json(),
commonjs({
include: [
/node_modules/,
"src/**",
],
transformMixedEsModules: true
}),
],
output: [
{
dir: "build/es",
format: "es",
entryFileNames: "[name].js",
exports: "named"
},
{
dir: "build/commonjs",
entryFileNames: "[name].cjs",
chunkFileNames: "[name]-[hash].cjs",
format: "cjs",
},
],
external: externalDeps,
};
const browserConfig = {
input: "src/index.browser.js",
plugins: [
polyfillNode({
exclude: ['crypto'],
}),
resolve({
browser: true,
preferBuiltins: false,
exportConditions: ['browser', 'default']
}),
json(),
commonjs({
include: [
/node_modules/,
"src/**",
],
transformMixedEsModules: true
}),
rollupBabel({
babelHelpers: 'bundled',
babelrc: false,
presets: [
[
'@babel/preset-env',
{
targets: '>0.25%, not dead',
modules: false
}
]
],
include: [
'src/**',
'node_modules/aes-js/**'
]
}),
],
output: {
file: "build/es/index.browser.js",
format: "es",
exports: "named",
inlineDynamicImports: true,
},
external: [],
};
export default [nodeConfig, browserConfig];