【发布时间】:2019-11-08 13:18:36
【问题描述】:
我正在尝试创建一个组件库 wie rollup 和 Vue,当其他人导入它时可以摇树。我的设置如下:
来自package.json的相关摘录
{
"name": "red-components-with-rollup",
"version": "1.0.0",
"sideEffects": false,
"main": "dist/lib.cjs.js",
"module": "dist/lib.esm.js",
"browser": "dist/lib.umd.js",
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w"
},
"devDependencies": {
/* ... */
}
这是我的全部rollup.config.js
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import vue from "rollup-plugin-vue";
import pkg from "./package.json";
export default {
input: "lib/index.js",
output: [
{
file: pkg.browser,
format: "umd",
name: "red-components"
},
{ file: pkg.main, format: "cjs" },
{ file: pkg.module, format: "es" }
],
plugins: [resolve(), commonjs(), vue()]
};
我有一个相当简单的项目结构,包含一个 index.js 文件和 2 个 Vue 组件:
root
∟ lib
∟ index.js
∟ components
∟ Anchor.vue
∟ Button.vue
∟ package.json
∟ rollup.config.js
我的index.js 导入 Vue 文件并导出它们:
export { default as Anchor } from "./components/Anchor.vue";
export { default as Button } from "./components/Button.vue";
export default undefined;
如果我不做export default undefined;,任何导入我的库的应用程序都找不到任何导出。很奇怪。
现在,当我创建另一个应用程序并像这样导入 red-components-with-rollup 时:
import { Anchor } from "red-components-with-rollup";
我从我的应用程序中打开包,我还会在我的包中找到Button.vue 的源代码,它还没有被作为死代码消除。
我做错了什么?
【问题讨论】:
-
我相信每个导出都应该在一个单独的文件中,这样你的导入看起来像:
import Anchor from "red-components-with-rollup/Anchor";
标签: javascript vue.js bundling-and-minification rollup tree-shaking