@qubit-ltd/rollup-builder 1.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +335 -0
  3. package/README.zh_CN.md +288 -0
  4. package/dist/rollup-builder.cjs +793 -0
  5. package/dist/rollup-builder.cjs.map +1 -0
  6. package/dist/rollup-builder.min.cjs +1 -0
  7. package/dist/rollup-builder.min.cjs.map +1 -0
  8. package/dist/rollup-builder.min.mjs +1 -0
  9. package/dist/rollup-builder.min.mjs.map +1 -0
  10. package/dist/rollup-builder.mjs +791 -0
  11. package/dist/rollup-builder.mjs.map +1 -0
  12. package/doc/api/fonts/OpenSans-Bold-webfont.eot +0 -0
  13. package/doc/api/fonts/OpenSans-Bold-webfont.svg +1838 -0
  14. package/doc/api/fonts/OpenSans-Bold-webfont.woff +0 -0
  15. package/doc/api/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  16. package/doc/api/fonts/OpenSans-BoldItalic-webfont.svg +1838 -0
  17. package/doc/api/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  18. package/doc/api/fonts/OpenSans-Italic-webfont.eot +0 -0
  19. package/doc/api/fonts/OpenSans-Italic-webfont.svg +1838 -0
  20. package/doc/api/fonts/OpenSans-Italic-webfont.woff +0 -0
  21. package/doc/api/fonts/OpenSans-Light-webfont.eot +0 -0
  22. package/doc/api/fonts/OpenSans-Light-webfont.svg +1839 -0
  23. package/doc/api/fonts/OpenSans-Light-webfont.woff +0 -0
  24. package/doc/api/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  25. package/doc/api/fonts/OpenSans-LightItalic-webfont.svg +1843 -0
  26. package/doc/api/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  27. package/doc/api/fonts/OpenSans-Regular-webfont.eot +0 -0
  28. package/doc/api/fonts/OpenSans-Regular-webfont.svg +1839 -0
  29. package/doc/api/fonts/OpenSans-Regular-webfont.woff +0 -0
  30. package/doc/api/fonts/OpenSans-Semibold-webfont.eot +0 -0
  31. package/doc/api/fonts/OpenSans-Semibold-webfont.svg +1838 -0
  32. package/doc/api/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  33. package/doc/api/fonts/OpenSans-Semibold-webfont.woff +0 -0
  34. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  35. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.svg +1838 -0
  36. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  37. package/doc/api/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  38. package/doc/api/global.html +2913 -0
  39. package/doc/api/index.html +418 -0
  40. package/doc/api/scripts/linenumber.js +34 -0
  41. package/doc/api/scripts/prettify/Apache-License-2.0.txt +202 -0
  42. package/doc/api/scripts/prettify/lang-css.js +2 -0
  43. package/doc/api/scripts/prettify/prettify.js +28 -0
  44. package/doc/api/styles/jsdoc-default.css +699 -0
  45. package/doc/api/styles/prettify-jsdoc.css +120 -0
  46. package/doc/api/styles/prettify-tomorrow.css +141 -0
  47. package/doc/rollup-builder.min.visualization.html +4842 -0
  48. package/doc/rollup-builder.visualization.html +4842 -0
  49. package/package.json +85 -0
@@ -0,0 +1,288 @@
1
+ # Rollup Builder
2
+
3
+ [![npm package](https://img.shields.io/npm/v/@haixing_hu/rollup-builder.svg)](https://npmjs.com/package/@haixing_hu/rollup-builder)
4
+ [![License](https://img.shields.io/badge/License-Apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
5
+ [![English Document](https://img.shields.io/badge/Document-English-blue.svg)](README.md)
6
+ [![CircleCI](https://dl.circleci.com/status-badge/img/gh/Haixing-Hu/rollup-builder/tree/master.svg?style=shield)](https://dl.circleci.com/status-badge/redirect/gh/Haixing-Hu/rollup-builder/tree/master)
7
+
8
+ `rollup-builder` 提供了一个工具函数,用于简化使用 [Rollup] 打包器构建 JavaScript 库的过程。
9
+ 它允许您生成多种格式,如 CommonJS (CJS)、ES Module (ESM) 和 Universal Module
10
+ Definition (UMD) 格式,可以选择是否进行代码压缩。
11
+
12
+ ## 目录
13
+
14
+ - [特性](#features)
15
+ - [安装](#installation)
16
+ - [使用](#usage)
17
+ - [配置选项](#configuration)
18
+ - [混合默认导出和命名导出](#mix-default-named)
19
+ - [贡献](#contributions)
20
+ - [许可证](#license)
21
+
22
+ ## <span id="features">特性</span>
23
+
24
+ - 以多种格式构建 JavaScript 库,使其在不同环境中通用。
25
+ - 轻松进行生产环境下的代码压缩。
26
+ - 自动生成用于调试的源映射。
27
+ - 使用简单的选项配置库的格式、文件名等。
28
+ - 您可以在 ESM(ES6 模块系统)模块中[混合使用默认导出和命名导出](#mix-default-named),
29
+ 并且 [Rollup] 将生成同时与 CommonJS 和 ES6 兼容的 CJS 或 UMD 格式代码。
30
+ - 支持通过 [Rollup] 插件和自定义配置高度定制。
31
+
32
+ ## <span id="installation">安装</span>
33
+
34
+ 您可以将 `rollup-builder` 安装为开发依赖,使用 `npm` 或 `yarn` 安装:
35
+
36
+ ```bash
37
+ npm install @haixing_hu/rollup-builder --save-dev
38
+ # 或
39
+ yarn add @haixing_hu/rollup-builder --dev
40
+ ```
41
+
42
+ ## <span id="usage">使用</span>
43
+
44
+ 1. 创建一个 [Rollup] 配置文件(通常命名为 `rollup.config.mjs`),并导出一个函数,该函数定义了库的构建选项。
45
+ 您可以使用提供的 `rollupBuilder` 函数来简化此过程。
46
+
47
+ 示例 `rollup.config.mjs`:
48
+
49
+ ```js
50
+ import rollupBuilder from '@haixing_hu/rollup-builder';
51
+
52
+ export default rollupBuilder('MyLibrary', import.meta.url);
53
+ ```
54
+
55
+ 2. 自定义 `rollup.config.mjs` 文件,以满足库的特定要求。您可以指定输入文件、格式、文件名前缀和其他选项。
56
+ 有关详细信息,请参阅 [配置选项](#configuration) 部分。
57
+
58
+ 示例 `rollup.config.mjs`:
59
+
60
+ ```js
61
+ import rollupBuilder from '@haixing_hu/rollup-builder';
62
+
63
+ export default rollupBuilder('MyLibrary', import.meta.url, {
64
+ formats: ['cjs', 'esm'],
65
+ minify: true,
66
+ // Customize additional options as needed.
67
+ });
68
+ ```
69
+
70
+ 3. 使用以下命令运行 [Rollup] 构建过程:
71
+
72
+ ```bash
73
+ rollup -c rollup.config.mjs
74
+ ```
75
+
76
+ 4. 构建后的库文件将位于 `dist` 目录中,遵循您指定的格式。例如,如果您指定了 `formats: ['cjs', 'esm']`,
77
+ 将生成以下文件:
78
+ ```bash
79
+ dist/my-library.cjs.js
80
+ dist/my-library.cjs.min.js
81
+ dist/my-library.esm.mjs
82
+ dist/my-library.esm.min.mjs
83
+ ```
84
+
85
+ 5. 您应该修改 `package.json` 文件,以指定库的入口点。例如,如果您指定了 `formats: ['cjs', 'esm']`,
86
+ 您应该将 `package.json` 文件中的 `main`, `module` 和 `exports` 字段设置为:
87
+ ```json
88
+ {
89
+ "main": "dist/my-library.cjs.min.js",
90
+ "module": "dist/my-library.esm.min.mjs",
91
+ "exports": {
92
+ ".": {
93
+ "require": "./dist/my-library.cjs.min.js",
94
+ "import": "./dist/my-library.esm.min.mjs"
95
+ }
96
+ }
97
+ }
98
+ ```
99
+ 6. 您应该将以下开发依赖项添加到您的库中:
100
+ ```bash
101
+ yarn add --dev @babel/core @babel/plugin-transform-runtime @babel/preset-env \
102
+ @rollup/plugin-alias @rollup/plugin-babel @rollup/plugin-commonjs \
103
+ @rollup/plugin-node-resolve @rollup/plugin-terser rollup rollup-plugin-analyzer
104
+ ```
105
+
106
+ ```bash
107
+ npm install -D @babel/core @babel/plugin-transform-runtime @babel/preset-env \
108
+ @rollup/plugin-alias @rollup/plugin-babel @rollup/plugin-commonjs \
109
+ @rollup/plugin-node-resolve @rollup/plugin-terser rollup rollup-plugin-analyzer
110
+ ```
111
+
112
+ ## <span id="configuration">配置选项</span>
113
+
114
+ - `libraryName: string`:您的库的名称(在 UMD 格式中使用)。
115
+ - `importMetaUrl: string`:调用者模块的 `import.meta.url`。
116
+ - `options: object`:额外的构建选项,包括:
117
+ - `debug: boolean`:是否启用调试模式。如果未指定此字段,默认值为 `false`。
118
+ - `formats: [string]`:构建的格式数组。它可以是以下值的数组:
119
+ - `'cjs'`: CommonJS 格式。
120
+ - `'umd'`: UMD 格式。
121
+ - `'esm'`: ES 模块格式。
122
+
123
+ 如果未指定此字段,默认值为 `['cjs', 'esm']`。
124
+ - `exports: string`:要使用的导出模式。它可以是以下值之一:
125
+ - `'auto'`:根据输入模块导出的内容自动猜测您的意图。
126
+ - `'default'`:如果您只使用`export default ...`导出一个事物;请注意,这可能在生成旨在与ESM输出互换的
127
+ CommonJS输出时引起问题。
128
+ - `'named'`:如果您使用命名导出。
129
+ - `'none'`:如果您没有导出任何东西(例如,您正在构建一个应用程序,而不是库)。
130
+ - `'mixed'`:如果您使用命名导出与默认导出混合。请注意,这不是 [Rollup] 官方支持的标准导出模式,而是此库添加的附加模式。
131
+ 有关更多详情,请参阅[混合默认和命名导出](#mix-default-named)。
132
+
133
+ 如果未指定此字段,默认值为`'auto'`。
134
+ - `nodeEnv: string`:`NODE_ENV` 环境变量。如果未指定此字段,默认值为 `process.env.NODE_ENV`。
135
+ - `minify: boolean`:是否对代码进行压缩。如果未指定此字段,对于生产环境,默认值为 `true`,否则为 `false`。
136
+ - `sourcemap: boolean`:是否生成源映射。如果未指定此字段,默认值为 `true`。
137
+ - `input: string`:库的输入文件。如果未指定此字段,默认值为 `'src/index.js'`。
138
+ - `outputDir: string`:库的输出目录。如果未指定此字段,默认值为 `'dist'`。
139
+ - `filenamePrefix: string`:输出文件的前缀。如果未指定此字段,默认值为库名称的短横线形式。
140
+ - `externals: [string]`:额外的外部包,每个可以通过字符串或正则表达式指定。如果未指定此字段,默认值为空数组。
141
+ - `useAliasPlugin: boolean`:是否使用 `@rollup/plugin-alias` 插件。如果未指定此字段,默认值为 `true`。
142
+ - `aliasPluginOptions: object`:`@rollup/plugin-alias` 插件的选项。如果未指定此字段,默认值为:
143
+ ```js
144
+ {
145
+ entries: {
146
+ 'src': fileURLToPath(new URL('src', importMetaUrl)),
147
+ },
148
+ }
149
+ ```
150
+ - `useNodeResolvePlugin: boolean`:是否使用 `@rollup/plugin-node-resolve` 插件。如果未指定此字段,默认值为 `true`。
151
+ - `nodeResolvePluginOptions: object`:`@rollup/plugin-node-resolve` 插件的选项。如果未指定此字段,默认值为:`{}`。
152
+ - `useCommonjsPlugin: boolean`:是否使用 `@rollup/plugin-commonjs` 插件。如果未指定此字段,默认值为 `true`。
153
+ - `commonjsPluginOptions: object`:`@rollup/plugin-commonjs` 插件的选项。如果未指定此字段,默认值为:
154
+ ```js
155
+ {
156
+ include: ['node_modules/**'],
157
+ }
158
+ ```
159
+ - `useBabelPlugin: boolean`:是否使用 `@rollup/plugin-babel` 插件。如果未指定此字段,默认值为 `true`。
160
+ - `babelPluginOptions: object`:`@rollup/plugin-babel` 插件的选项。如果未指定此字段,默认值为:
161
+ ```js
162
+ {
163
+ babelHelpers: 'runtime',
164
+ exclude: ['node_modules/**'],
165
+ presets: [
166
+ '@babel/preset-env',
167
+ ],
168
+ plugins: [
169
+ '@babel/plugin-transform-runtime',
170
+ ],
171
+ }
172
+ ```
173
+ 请注意,如果使用 `@rollup/plugin-babel` 插件,您还可以在标准的 Babel 配置文件中指定
174
+ Babel 的配置,例如 `babel.config.js`、`.babelrc` 等。
175
+ - `terserOptions: object`(对象):`@rollup/plugin-terser` 插件的选项。如果未指定此字段,
176
+ 默认值为:`{}`。是否使用 `@rollup/plugin-terser` 插件取决于选项的 `minify` 字段或
177
+ `NODE_ENV` 环境变量。
178
+ - `useAnalyzerPlugin: boolean`(布尔值):是否使用 `rollup-plugin-analyzer` 插件。
179
+ 如果未指定此字段,默认值为 `true`。
180
+ - `analyzerOptions: object`(对象):`rollup-plugin-analyzer` 插件的选项。
181
+ 如果未指定此字段,默认值为:
182
+ ```js
183
+ {
184
+ hideDeps: true,
185
+ limit: 0,
186
+ summaryOnly: true,
187
+ }
188
+ ```
189
+ - `useVisualizerPlugin: boolean`:是否使用`rollup-plugin-visualizer`插件。
190
+ 如果未指定此字段,默认值为`true`。
191
+ - `visualizerPluginOptions: object`:`rollup-plugin-visualizer`插件的选项。
192
+ 如果未指定此字段,默认值为:
193
+ ```js
194
+ {
195
+ filename: './doc/${filenameBase}.visualization.html',
196
+ gzipSize: true,
197
+ brotliSize: true,
198
+ }
199
+ ```
200
+ 其中`filenameBase`是编译后的库文件在`./dist`目录中的基本名称。
201
+ - `plugins`(对象数组):额外的 [Rollup] 插件。如果未指定此字段,默认值为空数组。
202
+
203
+ ## <span id="mix-default-named">混合默认导出和命名导出</span>
204
+
205
+ 如果一个 ESM(ES6 模块系统)模块同时具有默认导出和命名导出,[Rollup] 无法正确处理它。
206
+ 例如,以下是一个 ESM 模块源码:
207
+ ```js
208
+ export { Foo, Bar };
209
+ export default Foo;
210
+ ```
211
+ Rollup 会将其转换为以下代码:
212
+ ```js
213
+ exports.Foo = Foo;
214
+ exports.Bar = Bar;
215
+ exports.default = Foo;
216
+ ```
217
+ 然而,一个 CommonJS 代码模块通常会这样使用该模块:
218
+ ```js
219
+ const Foo = require('my-module');
220
+ ```
221
+ 这将导致一个错误。正确的用法应该是
222
+ ```js
223
+ const Foo = require('my-module').default
224
+ ```
225
+ 但不幸的是,[Rollup] 会将 ESM 默认导入转换为以下形式:
226
+ ```js
227
+ // 源代码
228
+ import Foo from 'my-module';
229
+ // 转换后
230
+ const Foo = require('my-module');
231
+ ```
232
+ 注意,上述转换没有 `.default` 后缀,这将导致错误。
233
+
234
+ 如果您在 ESM 模块中同时使用默认导出和命名导出,[Rollup] 将生成下述警告消息:
235
+ ```bash
236
+ (!) Mixing named and default exports
237
+ https://rollupjs.org/configuration-options/#output-exports
238
+ The following entry modules are using named and default exports together:
239
+ src/index.js
240
+
241
+ Consumers of your bundle will have to use chunk.default to access their default export, which may not be what you want. Use `output.exports: "named"` to disable this warning.
242
+ ```
243
+
244
+ 解决办法来自 [Rollup 官方插件的源代码],为每个 `CJS` 格式的包添加一个简单的`output.footer`:
245
+ ```js
246
+ module.exports = Object.assign(exports.default, exports);
247
+ ```
248
+ 这样 [Rollup] 会将混合输出转换为以下形式:
249
+ ```js
250
+ exports.Foo = Foo;
251
+ exports.Bar = Bar;
252
+ exports.default = Foo;
253
+ module.exports = Object.assign(exports.default, exports);
254
+ ```
255
+ 于是调用者可以直接使用下面方式引入默认导出:
256
+ ```js
257
+ const Foo = require('my-module');
258
+ // 或
259
+ import Foo from 'my-module';
260
+ ```
261
+
262
+ 有关更多详细信息,请参阅以下网页:
263
+ - [Rollup Configuration Options: output.exports]
264
+ - [Issue #1961: Question regarding mixing default and named exports]
265
+ - [StackOverflow: Mixing default and named exports with Rollup]
266
+ - [Github Repository: rollup-patch-seamless-default-export]
267
+
268
+ **注意:** 为了使用此特性,您必须在 `rollup.config.mjs` 文件中指定 `exports: 'mixed'` 选项,即:
269
+ ```js
270
+ import rollupBuilder from '@haixing_hu/rollup-builder';
271
+
272
+ export default rollupBuilder('MyLibrary', import.meta.url, { exports: 'mixed' });
273
+ ```
274
+
275
+ ## <span id="contributions">贡献</span>
276
+
277
+ 欢迎贡献!如果您发现任何问题或有改进建议,请随时提出问题或创建拉取请求。
278
+
279
+ ## <span id="license">许可证</span>
280
+
281
+ 本项目根据 Apache 2.0 许可证进行许可。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
282
+
283
+ [Rollup]: https://rollupjs.org/
284
+ [Rollup 官方插件的源代码]: https://github.com/rollup/plugins/blob/master/shared/rollup.config.mjs
285
+ [Rollup Configuration Options: output.exports]: https://rollupjs.org/configuration-options/#output-exports
286
+ [Issue #1961: Question regarding mixing default and named exports]: https://github.com/rollup/rollup/issues/1961
287
+ [StackOverflow: Mixing default and named exports with Rollup]: https://stackoverflow.com/questions/58246998/mixing-default-and-named-exports-with-rollup
288
+ [Github Repository: rollup-patch-seamless-default-export]: https://github.com/avisek/rollup-patch-seamless-default-export