vue cli3.0 封装组件全局引入js文件并发布到npm
首先用 vue create创建一个项目
当前的项目目录是这样的:
首先需要创建一个 packages 目录,用来存放组件
然后将 src 目录改为 examples 用作示例
二、修改配置
启动项目的时候,默认入口文件是 src/main.js
将 src 目录改为 examples 之后,就需要重新配置入口文件
在根目录下创建一个 文件
// vue.config.js module.exports = { // 将 examples 目录添加为新的页面 pages: { index: { // page 的入口 entry: ‘examples/main.js‘, // 模板来源 template: ‘public/index.html‘, // 输出文件名 filename: ‘index.html‘ } } }
完成这一步之后就可以正常启动项目了
vue-cli 3.x 提供了的命令,所以这里不需要再为 packages 目录配置 webpack
三、开发组件
之前已经创建了一个 packages 目录,用来存放组件
该目录下存放每个组件单独的开发目录,和一个 index.js 整合所有组件,并对外导出
每个组件都应该归类于单独的目录下,包含其组件源码目录 src,和 index.js 便于外部引用
这里以 textarea 组件为例,完整的 packages 目录结构如下:
textarea/src/main.vue 是组件的开发文件,具体代码这里就不展示了
需要注意的是,组件必须声明 name,这个 name 就是组件的标签
textarea/index.js 用于导出单个组件,如果要做按需引入,也需要在这里配置
// packages/textarea/index.js // 导入组件,组件必须声明 name import Textarea from ‘./main.vue‘ // 为组件添加 install 方法,用于按需引入 Textarea.install = function (Vue) { Vue.component(Textarea.name, Textarea) } export default Textarea
四、整合并导出组件
编辑 packages/index.js 文件,实现组件的全局注册
// packages / index.js // 导入单个组件 import Textarea from ‘./textarea/index‘ // 以数组的结构保存组件,,便于遍历 const components = [ Textarea ] // 定义 install 方法 const install = function (Vue) { if (install.installed) return install.installed = true // 遍历并注册全局组件 components.map(component => { Vue.component(component.name, component) }) } if (typeof window !== ‘undefined‘ && window.Vue) { install(window.Vue) } export default { // 导出的对象必须具备一个 install 方法 install, // 组件列表 ...components }
到这里组件就已经开发完毕
可以在 examples/main.js 中引入该组件
import TagTextarea from ‘../packages/index‘ Vue.use(TagTextarea)
然后就能直接使用刚才开发的 textarea 组件
组件的标签就是组件内定义的的 name
这时候可以 npm run serve 启动项目,测试一下组件是否有 bug
// 启动前需要确保已经在 vue.config.js 中添加了新入口 examples/main.js
五、打包组件
vue-cli 3.x 提供了一个
主要需要四个参数:
1. target: 默认为构建应用,改为 lib 即可启用构建库模式
2. name: 输出文件名
3. dest: 输出目录,默认为 dist,这里我们改为 lib
4. entry: 入口文件路径,默认为 src/App.vue,这里改为 packages/index.js
基于此,在 package.json 里的 scripts 添加一个 lib 命令
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/42737.html