首页 > 其他分享 >vue封装的组件发布到npm,超详细及问题解决

vue封装的组件发布到npm,超详细及问题解决

时间:2023-02-09 15:55:31浏览次数:48  
标签:npm vue 封装 js packages 组件 loader

1. 创建一个新的vue项目

vue create base-page 创建一个新的项目,npm run serve 之后删掉多余的代码
image

2. 将自己的组件代码移入项目中

增加一个新的packages文件夹(组件文件夹),examples文件夹(组件示例文件夹),element组件库也是这样命名的。
将自己封装的组件移入packages文件夹中。examples文件夹中放自己使用组件的示例。

image

记得要将自己组件的依赖下载

image

3. 项目配置

1. 因为我组件里面有jsx文件,所以要安装

@vue/babel-helper-vue-jsx-merge-props @vue/babel-helper-vue-jsx-merge-props

然后在根目录下添加.babelrc.js进行配置

image

image

2. 因为我使用了<a-icon :component='xx'></a-icon>ant-design的自定义图标,所以要webpack,在vue.config.js文件中配置,use()中对应的依赖也要安装,注意下载的版本。

3. 因为我使用less处理css样式,但是打包之后引用的组件中并没有样式。将打包之后的css文件强制打包到js中,就生效了,也是在vue.config.js中配置

// 默认的的主题颜色,全局可统一配置
const theme = require('./src/theme/default.json')
const path = require('path')
module.exports = {
  /*
  *  扩展 webpack 配置
  */
  chainWebpack: config => {
    // @ 默认指向 src 目录,这里要改成 examples
    // 另外也可以新增一个 ~ 指向 packages
    config.resolve.alias
      .set('@', path.resolve('examples'))
      .set('~', path.resolve('packages'))
    // 把 packages 和 examples 加入编译,因为新增的文件默认是不被 webpack 处理的
    config.module
      .rule('js')
      .include.add(/packages/)
      .end()
      .include.add(/examples/)
      .end()
      .use('babel')
      .loader('babel-loader')
      .tap(options => {
        // 修改它的选项...
        return options
      })
    /*
     *   处理<a-icon :component='xx'></a-icon>自定义图标问题
     */  
    const svgRule = config.module.rule('svg')
    // 清除已有的所有 loader,如果你不这样做,接下来的 loader 会附加在该规则现有的 loader 之后。
    svgRule.uses.clear()
    // 清除已有的所有 loader。
    // 因为是vue-cli5所以要加这两个delete.
    svgRule.delete('generator')
    svgRule.delete('type')
    // 添加要替换的 loader
    svgRule
      .oneOf('inline')
      .resourceQuery(/inline/)
      .use('vue-svg-icon-loader')
      .loader('vue-svg-icon-loader')
      .end()
      .end()
      .oneOf('external')
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: 'assets/[name].[hash:8].[ext]'
    })
  },
  css: {
    // 强制将样式打到js里
    extract: false,
    loaderOptions: {
      less: {
        modifyVars: theme,
        javascriptEnabled: true
      }
    }
  }
}

4. 组件打包

package.json 文件配置

image

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

npm run build:npm 命令


--target      app | lib | wc | wc-async (默认值:app) 默认打包的项目,lib打包是组件库

--dest        指定输出目录 (默认值:dist)

最后面的src/packages/basePage/index.js入口文件 默认为 src/App.vue。这里指定为我们的组件入口

image

然后执行打包命令 npm run build:npm

5. 上传到npm

1. 添加.npmignore文件

这个和.gitignore文件效果一样,忽略不需要上传的文件,上传到npm我们只需要上传打包之后的lib及相关文件就可以。

image

2. 登录npm官网

  • 注册一个npm账号

  • 如果配置了淘宝镜像或者使用公司自己的,需要切换成npm官方镜像
    在控台输入 npm config set registry http://registry.npmjs.org 切换源
    或者使用 nrm工具 nrm use npm 没有安装的可以 npm install nrm -g

  • 控制台登录npm login

  • 然后最后一步npm publish,每次发布的版本要不一样,如果遇到了重名的需要改一下自己发布的名字。

最后我们可以到npm官网查看自己发布的npm包

image

标签:npm,vue,封装,js,packages,组件,loader
From: https://www.cnblogs.com/wang--chao/p/17105299.html

相关文章

  • 分享5个我不能没有的Vue.js库,不信你用不上
    开发人员最好的朋友和救星就是这些第三方库,无论是开发新手还是经验丰富的老手,我们都喜欢开源软件包。借助开源库加速Vue项目的开发进度是现代前端开发比较常见的方式,这几个......
  • VUE相关面试题目01
    一、MVVM是什么;   MVC:               MVVM的描述:                常见库实现数据双向绑定的效果......
  • vue2和vue3的区别有哪些?
    一、Vue3与Vue2区别详述1.生命周期对于生命周期来说,整体上变化不大,只是大部分生命周期钩子名称上+“on”,功能上是类似的。不过有一点需要注意,Vue3在组合式API(Com......
  • ant-desgin-vue
    报错[antdv:Form.Item]CannotgeneratevalidateStatusandhelpautomatically分析:此类问题,一般都是a-form-item标签下,包含了多个v-decorator属性导致的解决:1.保障......
  • npm淘宝镜像
    一.参考博客二.随记2.1重点2.1.1有两种方式第一种下载cnpm:npminstall-gcnpm--registry=http://registry.npmmirror.com第二种更改镜像配置:npmconfigsetregi......
  • vue 一次显示多张图片的轮播图
    1. npm i vue-slick-carousel<template><div><divclass="activities"><VueSlickCarouselv-bind="settings"><divclass="activity">......
  • vue 图片分页
    <divclass="activitiesphone"><!--动态--><divclass="activity"v-for="(item,index)inimgList.slice(......
  • npmFix the upstream dependency conflict, or retry npm ERR! this command with --f
      因为node7在某些事件处理上比node6更加严格,解读上面的报错信息,找到解决方案npminstall--legacy-peer-deps即可成功安装node_modules ......
  • vue 前端, 树形菜单的回显
      //树菜单回显(多级)  changeDetSelect(key,treeData){   letarr=[];//在递归时操作的数组   letreturnArr=[];//存放结果的数组 ......
  • 《Vue.js 设计与实现》读书笔记 - 第14章、内建组件和模块
    第14章、内建组件和模块14.1KeepAlive组件的实现原理KeepAlive一词借鉴了HTTP协议。KeepAlive组件可以避免组件被频繁的销毁/重建。本质是缓存管理,再加上特殊的挂......