我正在同时构建一个 Vue 应用程序和一个 Vue 组件库。所以,我想用 npm 链接设置库,这样我就不必继续发布我的库包并在我的主应用程序中重新安装它。
我的包裹将被调用@company/vue
。我可以将它发布到 npm 并在我的 Vue 应用程序中安装/使用它,如下所示:
import Vue from 'vue';
import VueComponents from '@company/vue';
Vue.use(VueComponents);
这很好用。我可以访问我的 .vue 文件中的组件等等。
但是,如果我按照标准步骤链接我的库:
- cd 路径/到/库
- npm 链接
- cd 路径/到/应用程序
- npm 链接@company/vue
启动开发模式后,我收到以下警告:
export 'default' (imported as 'VueComponents') was not found in '@company/vue'
当然,页面中的任何内容都不会加载。
我不得不想象我可能把它捆绑错了?
我的构建脚本如下所示:
vue-cli-service build --no-clean --target lib --name company-vue src/index.js
还有它所指的我的 index.js:
import './index.scss';
import * as components from './components/index.js';
const CompanyVue = {
install(Vue) {
if (this.installed) {
return;
}
this.installed = true;
for (let name in components) {
Vue.use(components[name]);
}
}
};
let GlobalVue = null;
if (typeof window !== 'undefined') {
GlobalVue = window.Vue;
}
else if (typeof global !== 'undefined') {
GlobalVue = global.Vue;
}
if (GlobalVue) {
GlobalVue.use(Plugin);
}
export * from './components';
export default CompanyVue;
这只是我见过的大多数图书馆这样做的标准方式。再说一次,如果我从 npm 中拉出包,它工作正常。
这是与我的 package.json 中的捆绑相关的内容:
"files": [
"dist",
"src",
"!src/**/*.spec.js",
"!src/**/*.stories.js"
],
"main": "./dist/company-vue.common.min.js",
"module": "./dist/company-vue.umd.min.js",
"browser": "./dist/company-vue.umd.min.js",
"unpkg": "./dist/company-vue.umd.min.js"
最后,我的组件库的 babel 配置:
module.exports = {
presets: ['@babel/preset-env'],
env: {
test: {
presets: [[
'@babel/preset-env',
{
targets: { node: "current" }
}
]]
}
}
}