美文网首页让前端飞Web前端之路
Vue基于已有的项目封装组件发布npm

Vue基于已有的项目封装组件发布npm

作者: 蓝海00 | 来源:发表于2020-07-15 13:32 被阅读0次

    一、修改项目结构

    • 当前结构


    • 修改后结构

    将原来的 src 目录,修改成 examples
    新建 packages 文件夹,用来存放后续的组件

    二、修改配置

    项目启动默认入口是 src/main.js,第一步已将 src 文件名改成 examples 所以需要配置入口

    • 已有 vue.config.js 文件
    module.exports = {
      pages: {
        index: {
          // 入口文件
          entry: 'examples/main.js',
          template: 'public/index.html',
          filename: 'index.html'
        }
      }
    }
    
    • 没有 vue.config.js 文件
      在根目录下新建此文件 配置pages

    重新启动项目 查看路径是否正确并能正常启动项目

    三、开发组件

    之前已经创建了一个 packages 目录,用来存放组件
    该目录下存放每个组件单独的开发目录,和一个 index.js 整合所有组件,并对外导出
    每个组件都应该归类于单独的目录下,包含其组件源码目录 src,和 index.js 便于外部引用

    test组件为例,完整的packages如下

    • packages/test/src.main.vue 是组件的代码 注意点: 一定要声明name,name就是组件的标签
    • packages/test/index.js 用于导出单个组件,如果要做按需引入,也需要在这里配置
    // 导入组件,组件必须声明 name
    import Test from './src/main.vue'
    
    // 为组件添加 install 方法,用于按需引入
    Test.install = function (Vue) {
        Vue.component(Test.name, Test)
    }
    
    // 默认导出组件
    export default Test
    
    • packages/index.js 整合并导出组件,实现组件全局注册
    // 导入单个组件
    import Test from './test/index.js'
    
    // 以数组的结构保存组件,便于遍历
    const components = [
        Test
    ]
    
    // 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册
    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,才能被 Vue.use() 方法安装
        install,
        // 组件列表
        ...components
    }
    

    四、测试组件是否封装成功

    在examples/main.js中引入组件

    // 这里的 TagTest 就是组件内定义的name
    import TagTest from 'pack/index.js'
    Vue.use(TagTest)
    

    运行项目测试组件是否有bug

    五、打包组件

    在 package.json 里的 scripts 添加一个 lib 命令

    "build:lib": "vue-cli-service build --target lib --name 生成的库名 --dest lib packages/index.js"
    

    运行 npm run build:lib,编译组件,成功后会在根目录生成一个lib文件

    六、发布

    配置package.json文件中发布到npm的字段

    {
      "name": "xxx", // 包名,该名字是唯一的。可在 npm 官网搜索名字,如果存在则需换个名字。
      "version": "0.1.0", // 版本号,每次发布至 npm 需要修改版本号,不能和历史版本号相同。
      "description": "", // 描述
      "main": "lib/xxx.umd.min.js", //  入口文件,该字段需指向我们最终编译后的包文件。
      "keyword": "", // 关键字,以空格分离希望用户最终搜索的词。
      "private": false // 是否私有,需要修改为 false 才能发布到 npm
      "author": "lh"  // 作者
      "license": "MIT" // 开源协议
    

    在根目录下新建.npmignore文件,设置忽略发布文件

    .DS_Store
    node_modules/
    examples/
    packages/
    public/
    vue.config.js
    babel.config.js
    *.map
    *.html
    
    # local env files
    .env.local
    .env.*.local
    
    # Log files
    npm-debug.log*
    yarn-debug.log*
    yarn-error.log*
    
    # Editor directories and files
    .idea
    .vscode
    *.suo
    *.ntvs*
    *.njsproj
    *.sln
    *.sw*
    

    七、发布npm

    • 切换镜像
    npm config set registry http://registry.npmjs.org 
    
    • 登陆npm
    npm login
    
    • 上传发布
     npm publish
    

    相关文章

      网友评论

        本文标题:Vue基于已有的项目封装组件发布npm

        本文链接:https://www.haomeiwen.com/subject/ippdhktx.html