UNPKG

stan-builder

Version:
281 lines (177 loc) 7.03 kB
[npm]: https://img.shields.io/npm/v/stan-builder [npm-url]: https://www.npmjs.com/package/stan-builder [download]: http://img.shields.io/npm/dm/stan-builder.svg?style=flat [test]: https://github.com/planjs/stan/actions/workflows/test.yml/badge.svg [size]: https://packagephobia.now.sh/badge?p=stan-builder [size-url]: https://packagephobia.now.sh/result?p=stan-builder [![npm][npm]][npm-url] [![size][size]][size-url] [![test][test]][test] [![NPM downloads][download]][npm-url] # `stan-builder` > 集成 `rollup` `babel` 常用打包配置. ## Install Using npm: ```console npm install stan-builder --save-dev ``` ## Features * ✔︎ 支持 typeScript * ✔︎ 支持 cjs、esm、umd、systemjs 四种格式的打包 * ✔︎ esm 支持生成 mjs,直接为浏览器使用 * ✔︎ 支持 postcss * ✔︎ 支持打包成 node browser 用的代码 ## Usage ```shell script # Bundle library stan-builder --esm --cjs --minify # Bundle dev stan-builder -w ``` ## Config 新建配置文件 `.stanrc.ts` `.stanrc.js` `.stanrc.tsx` ```typescript // BundleOptions export default { esm: true, umd: true, target: 'browser', } ``` ### Bundle Options #### entry 指定入口文件。 * Type: `string` * Default:`src/index.js` 默认会查找 `src/index.tsx`, `src/index.ts`, `src/index.jsx`, `src/index.js`, `src/index.vue`,如果存在,则会作为默认的 entry。如果库文件为 `typescript`,则需要在根目录配置`tsconfig.json`,否则会编译错误。 `babel` 模式下是编译 `entry` 所在文件夹的所有文件。 > 如果是 `vue` 默认使用的是 `vue3` `rollup-plugin-vue@6.x`, 如果是 `vue2` 请项目内安装 `rollup-plugin-vue@5.x` #### file 指定输出文件名。 * Type: `string` * Default:与 `entry` 相同的文件名,`entry.[umd|cjs|esm].[min].js` 默认自动增加后缀。 > - `[esm|cjs|umd].file` 优先级比这个高,没有配置则默认这个。 #### bundler 打包工具。 * Type: `rollup | babel` > - `umd` `systemjs` 规范只支持使用 `rollup`。 #### runtimeHelpers 是否把 helper 方法不打包引入 `@babel/runtime`> - 推荐开启,减少打包体积,公用项目内的 `runtime`。 > - 开启 `runtimeHelpers`,一定要在 dependencies 里有 `@babel/runtime` 依赖 > - `runtimeHelpers` 只对 esm 有效,cjs 下无效,因为 cjs 已经不给浏览器用了。 #### minify 是否压缩代码。 * Type: `boolean` * Default: `false` > - 开启会自动生成`.min`后缀的文件。 > - `css` 使用 `postcss`,`js` 使用 `terser`。 > - `[esm|cjs|umd].minify` 优先级比这个高,没有配置则默认这个。 #### extractCSS 配置是否提取 css 为单独文件。 * Type: `boolean` * Default: `false` #### injectCSS 是否在 `<head>` 里注入css。 * Type: `boolean` * Default: `true` #### sourcemap 是否同步输出sourcemap。 * Type: `boolean` * Default: `false` #### esm 输出`esm`规范的代码。 * Type:`"rollup" | "babel" | { type, file, mjs, bundler, minify, sourcemap, target, runtimeHelpers } | `boolean`` #### cjs 输出`cjs`规范的代码。 * Type:`"rollup" | "babel" | { type, file, lazy, bundler, minify, sourcemap, target, runtimeHelpers } | `boolean`` #### cjs.lazy 是否开启 lazy require。 * Type: `boolean` * Default: `false` > 可加速命令行执行速度,同时减少依赖和耦合。 #### umd 输出`umd`规范的代码。 * Type: `"rollup" | "babel" | { type, file, name, global, bundler, minify, sourcemap, target, runtimeHelpers } | `boolean`` #### umd.name 指定 `rollup` 的 [name](https://rollupjs.org/guide/en/#output-name) 配置。 * Type: `string` * Default:默认 camelCase packages.json 中的 `name` #### umd.global 指定 `rollup` 的 [global](https://rollupjs.org/guide/en/#output-globals) 配置。 * Type: `react=React,react-dom=ReactDom | { pkg: global name }` > - `external` 中的包默认会 camelCase 作为默认值。 #### system 输出`systemjs`规范的代码,默认使用`rollup`* Type:`boolean` #### target 配置是 node 库还是 browser 库,只作用于语法层。 * Type: `"node" | "browser"` * Default: `"browser"` > - 如果 `entry` 后缀为 `.jsx|.tsx` 默认为 `browser`。 #### extraBabelPlugins 配置额外的 babel plugins。 * Type: `array` * Default: `[]` #### extraBabelPresets 配置额外的 babel preset。 * Type: `array` * Default: `[]` #### extraExternals 配置一些依赖走 externals。 * Type: `array<string | RegExp>` * Default: [] > * rollup 的 external 保留内部默认处理,新增 external > * 打包esm, cjs时 dependencies 和 peerDependencies 里的内容会被 external > * 打包umd时 peerDependencies 会被 external #### externalsExclude 配置一些依赖不走 externals。 * Type: `array<string | RegExp>` * Default: `[]` #### externalPeerDependenciesOnly 只 externals `peerDependencies` 中的依赖。 * Type: `string[]` * Default: `[]` #### extraPostCSSPlugins 配置额外 postcss plugin * Type: `string[]` * Default: `[]` #### extraRollupPlugins 配置额外 rollup plugin * Type: `array` * Default: `[]` #### analyze 是否可视化展示打包的模块大小,使用 [rollup-plugin-visualizer](https://github.com/btd/rollup-plugin-visualizer) 。 * Type: `boolean` * Default: `false` #### copy.targets 是否打包同时复制文件。 * Type: `{ src, dest, rename, transform } | array` * Default: `undefined` > - 这里使用 [globby](https://github.com/sindresorhus/globby) 匹配文件。 > - 如果 watch 模式,匹配到的文件也会 watch 并且copy。 #### copy.flatten 是否复制的时候删除目录结构。 * Type: `boolean` * Default: `true` #### rollup plugin options * `nodeResolveOpts`: [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/blob/master/packages/node-resolve/README.md) * `replaceOpts`: [@rollup/plugin-replace](https://github.com/rollup/plugins/blob/master/packages/replace/README.md) * `commonjsOpts`: [@rollup/plugin-commonjs](https://github.com/rollup/plugins/blob/master/packages/commonjs/README.md) * `injectOpts`: [@rollup/plugin-inject](https://github.com/rollup/plugins/blob/master/packages/inject/README.md) * `terserOpts`: [rollup-plugin-terser](https://github.com/TrySound/rollup-plugin-terser) * `typescript2Opts`: [rollup-plugin-typescript2](https://github.com/ezolenko/rollup-plugin-typescript2) > 如果项目内有 `typescript` 默认 `declaration: true` * `aliasOpts`: [@rollup/plugin-alias](https://github.com/rollup/plugins/blob/master/packages/alias/README.md) * `visualizerOpts`: [rollup-plugin-visualizer](https://github.com/btd/rollup-plugin-visualizer) * `postcssOpts`: [rollup-plugin-postcss](https://github.com/egoist/rollup-plugin-postcss#readme) > 如果是 ts 可以参考 `stan-builder/typings/types.d.ts` 中的 `BundleOptions` ## Usage in node ```js const builder = require('stan-builder'); builder({ verbose: true }).then(() => { console.log("Build complete.") }) ```