$ cnpm install umi-library
Library toolkit based on rollup and docz.
Install umi-library via yarn or npm.
$ yarn add umi-library
# Bundle library
$ umi-library build
# umi-lib is the alias for umi-library
$ umi-lib build
# dev with doc
$ umi-lib doc dev
# build doc
$ umi-lib doc build
# deploy doc to github.io
$ umi-lib doc deploy
打包库,输出多种格式的文件。
# Normal build
$ umi-lib build
# Bundle src/foo.js with esm=rollup, cjs=rollup and umd, and specify the output filename with bar
$ umi-lib build --esm --cjs --umd --file bar src/foo.js
Success!
$ tree ./dist
./dist
- bar.js
- bar.esm.js
- bar.umd.js
- bar.umd.min.js
doc 包含 dev 和 build 两个子命令。
$ umi-lib doc dev
$ umi-lib doc build
$ umi-lib doc deploy
所有的命令行参数会透传给 docz,详见 docz.site#project-configuration。
注:
--config 参数,通过 --config 指定的文件内容可全部配置在 .umirc.library.js 的 doc 配置里。deploy 之前请先执行 build 命令,文档部署后域名为:https://yourname.github.io/your-repo。新建 .umirc.library.js 文件进行配置。
比如:
export default {
entry: 'src/foo.js',
doc: {
themeConfig: { mode: 'dark' },
base: '/your-repo'
},
}
注意:
.umirc.library.js 配置指定入口文件。
string | string[]src/index.js注:事实上,我们会依次找 src/index.tsx, src/index.ts, src/index.jsx, src/index.js,如果存在,则会作为默认的 entry。如果库文件为 typescript,则需要在根目录配置tsconfig.json,否则会编译错误。
指定输出文件。
string.esm.js 后缀,umd 会加 .umd[.min].js 后缀注:
是否输出 esm 格式,以及指定 esm 格式的打包方式等。
"rollup" | "babel" | { type, file, mjs } | falsefalseesm 为 rollup 或 babel 时,等同于配置了 { type: "rollup" | "babel" }。
指定 esm 的打包类型,可选 rollup 或 babel。
"rollup" | "babel"undefined指定 esm 的输出文件名。
stringundefined是否同时输出一份给浏览器用的 esm,以 .mjs 为后缀。
booleanfalse注:
是否压缩 esm 格式。
booleanfalse通常不需要配置,除非你发布到 npm 的代码需要保密。
是否输出 cjs 格式,以及指定 cjs 格式的打包方式等。
"rollup" | "babel" | { type, file } | falsefalsecjs 为 rollup 或 babel 时,等同于配置了 { type: "rollup" | "babel" }。
指定 cjs 的打包类型,可选 rollup 或 babel。
"rollup" | "babel"undefined指定 cjs 的输出文件名。
stringundefined是否压缩 cjs 格式。
booleanfalse通常不需要配置,除非你发布到 npm 的代码需要保密。
是否输出 umd 格式,以及指定 umd 的相关配置。
{ globals, name, minFile, file } | falsefalse指定 rollup 的 globals 配置。
指定 rollup 的 name 配置。
string${camelCase(basename(pkg.name))}是否为 umd 生成压缩后的版本。
booleanfalse指定 umd 的输出文件名。
stringundefined配置参数传给 autoprefixer,详见 autoprefixer#options,常用的有 flexbox 和 browsers。
比如:
export default {
autoprefixer: {
browsers: [
'ie>8',
'Safari >= 6',
],
},
}
配置是否开启 css modules。
booleanfalse默认是 .module.css 走 css modules,.css 不走 css modules。配置 cssModules 为 true 后,全部 css 文件都走 css modules。(less 文件同理)
配置额外的 babel preset。
array[]配置额外的 babel plugin。
array[]比如配置 babel-plugin-import 按需加载 antd,
export default {
extraBabelPlugins: [
['babel-plugin-import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}],
],
};
配置额外的 postcss plugin。
array[]配置 rollup-plugin-commonjs 的 namedExports。
配置是 node 库还是 browser 库,只作用于语法层。
"node" | "browser""browser"如果为 node,兼容到 node@6;如果为 browser,兼容到 ['last 2 versions', 'IE 10'],所以肯定会是 es5 的语法。
是否把 helper 方法提取到 @babel/runtime 里。
booleanfalse注:
runtimeHelpers,一定要在 dependencies 里有 @babel/runtime 依赖配置需要替换的内容,基于 rollup-plugin-replace。
Object{}注:
JSON.stringify() 转下比如:
export default {
replace: {
VERSION: JSON.stringify(require('./package').version),
},
},
根据 entry 覆盖配置。
比如要为不同的 entry 配置不同的输出文件名,
export default {
entry: ['foo.js', 'bar.js'],
overridesByEntry: {
'foo.js': {
file: 'bar',
},
'bar.js': {
file: 'foo',
},
},
}
overridesByEntry 里的配置会和外面的配置进行 shadow 合并,比如:
export default {
umd: { globals: { jquery: 'window.jQuery' } }
entry: ['foo.js', 'bar.js'],
overridesByEntry: {
'foo.js': {
umd: { name: 'foo' },
},
},
}
则 foo.js 的 umd 配置为 { globals: { jquery: 'window.jQuery' }, name: 'foo' }。
透传配置给 docz,可以有 title、theme、themeConfig 等。
比如要切换默认主题为 dark 模式:
export default {
doc: { themeConfig: { mode: 'dark' } },
}
此配置在 docz 中没有标明,但是却是支持的,可用于扩展 html 模板。
export default {
doc: {
htmlContext: {
head: {
favicon: '',
meta: [],
links: [
{ rel: 'stylesheet', href: 'foo.css' },
],
scripts: [
{ src: 'bar.js' },
],
},
body: {
scripts: [
{ src: 'hoo.js' },
],
},
},
}
};
一些小贴士:
esm: "rollup" 就够了cjs: "rollup"package.json 里配上 sideEffects: false | string[],会让 webpack 的 tree-shaking 更高效babel 模式下一些文件不会被编译到 es 和 lib 下,包含:
LERNA=none 时强制不走 lerna 方式的构建。
lerna 模式下,指定 package 只构建一个,调试时用于提效。
# 只构建 packages/foo
$ PACKAGE=foo umi-lib build
MIT
Copyright 2013 - present © cnpmjs.org | Home |