一、使用 vue create currentdatetime创建项目(可查考https://cli.vuejs.org/zh/guide/creating-a-project.html),创建成功后项目目录结构如下:

二、在项目的根目录新建一个packages文件夹,用于存放需要发布的组件。

三、支持对package目录的处理,在vue.config.js文件中修改配置中的chainWebpack选项。

const { defineConfig } = require('@vue/cli-service')
const path = require('path')
module.exports = defineConfig({
transpileDependencies: false, // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。你可以启用本选项,以避免构建后的代码中出现未转译的第三方依赖。
publicPath: './', // 部署应用包时的基本URL
outputDir: 'dist', // 当运行 vue-cli-service build 时生成的生产环境构建文件的目录。
assetsDir: 'static', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
indexPath: 'index.html', // 设置index.html
filenameHashing: true, // 设置打包生成的静态资源的文件名中是否加入hash以便控制浏览器缓存问题
productionSourceMap: false, // 设置生产环境的 source map 开启与关闭
devServer: {
open: true, // npm run dev启动项目后是否自动打开浏览器
host: 'localhost', // 匹配本机IP地址(默认是0.0.0.0或localhost)
port: 8080, // 端口号 ,默认:8080
hot: true, // 是否开启热更新(局部刷新,不刷新整个页面)
https: false, // 是否启用https
compress: true // 是否启动gzip压缩,用于减少服务器向前端传输的数据量,提高浏览的速度
},
// 扩展 webpack 配置,使 packages 加入编译
chainWebpack: config => {
config.module
.rule('js')
.include
.add(__dirname + 'packages')
.end()
.use('babel')
.loader('babel-loader')
.tap(options => {
// 修改它的选项...
return options
})
}
})

四、可参考element-ui的组件结构,在packages目录下新建组件的目录结构。

  例如需要新建一个组件 currentDate,则在packages下新建 文件夹 currentDate,然后在该目录下新建src/main.vue的文件,用于编写组件信息,在currentDate的目录下建一个index.js用于导出该组件。

五、编写currentDate/index.js文件,对外提供对组件的引用

import CurrentDate from './src/main';

/* istanbul ignore next */
CurrentDate.install = function(Vue) {
Vue.component(CurrentDate.name, CurrentDate);
}; export default CurrentDate;

六、在packages的目录下,创建一个index.js文件,用于整合所有的组件并对外导出,以便一个完整的组件库。

// 引入该目录下所有的组件
import CurrentDate from "./currentDate/index.js";
import CurrentDateTime from "./currentDateTime/index.js";
import CurrentDateTimeWeek from "./currentDateTimeWeek/index.js"; const components = [
CurrentDate, CurrentDateTime, CurrentDateTimeWeek
] const MyModule = {}
MyModule.install = Vue => {
components.forEach(component => {
Vue.component(component.name, component)
})
} if (typeof window !== 'undefined' && window.Vue) {
MyModule.install(window.Vue)
} export default MyModule

七、可以在项目结构里面引入该组件,以便测试组件的正确性。

  7.1 在src/main.js中引入并注册该组件:

import Vue from 'vue'
import App from './App.vue' import MyModule from '../packages/index.js' // 引入组件库
Vue.use(MyModule) // 注册组件库 Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')

  7.2 可直接在app.vue中使用组件,以便查看效果:

<template>
<div id="app">
<CurrentDate></CurrentDate>
<CurrentDateTime></CurrentDateTime>
<CurrentDateTimeWeek></CurrentDateTimeWeek>
</div>
</template> <style lang="scss">
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

八、发布到npm

  8.1 修改package.json,在 scripts 下增加一个编辑到库的命令:

    –target: 构建目标,默认为应用模式。这里修改为 lib 启用库模式。
      –dest :  输出目录,默认 dist。这里我们改成 lib
              [entry]:  最后一个参数为入口文件,默认为 src/App.vue。这里我们指定编译 packages/ 组件库目录。

{
"name": "currentdatetime", // npm包名称
"version": "1.0.0", // 版本信息
"description": "显示当前时间", // 描述信息
"main": "lib/currentdatetime.umd.min.js", // 入口文件
"keyword": "currentdatetime currentdate currentdatetimeweek", // 关键字
"license": "MIT", // 开源协议
"private": false, // 这个只有设置为 false 才能发布到 npm
"scripts": {
"dev": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"lib": "vue-cli-service build --target lib --name currentdatetime --dest lib packages/index.js" // 新增的一个npm run lib的命令,运行时会在根目录生成一个lib的文件夹,并把组件编译到该目录下
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^2.6.14"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"vue-template-compiler": "^2.6.14"
}
}

  8.2 添加 .npmignore 文件,设置忽略发布文件

忽略目录
src/
packages/
public/ 忽略指定文件
vue.config.js
babel.config.js
*.map

  8.3 登录到npm,npm账号注册可在官网进行(npm官网)

npm login // 在终端执行登录命令,输入用户名、密码、邮箱即可登录
npm publish // 执行发布命令,发布组件到npm

九、引入并注册发布的组件库

  

  

vue发布自定义组件到npm的更多相关文章

  1. vue中自定义组件(插件)

    vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...

  2. 【VUE】自定义组件

    [VUE]自定义组件 转载: ============================================ ======================================== ...

  3. vue的自定义组件和组件传值

    <div id="app"> <div>{{pmessage}}</div> //父组件 <child :message="pm ...

  4. vue之自定义组件

    除了核心功能默认内置的指令外,vue也允许用户注册自定义指令.虽然在vue2.0中,代码复用和抽象的主要形式是组件,但是有些情况下,我们仍需要对普通DOM元素进行底层操作,这个时候就需要用到自定义指令 ...

  5. vue 相邻自定义组件渲染错误正确的打开方式

    话不多说看问题: 当封装自定义组件时例如(自定义下拉列表)两个相同的组件在多次v-if变化时偶尔会发生渲染错误,明明赋值正确但是组建中的ajax方法可能返回的数据乱掉,或者其他神逻辑错误. 经过查询发 ...

  6. 编程小白入门分享五:Vue的自定义组件

    前言 上篇博客简单介绍了vue,本篇博客要在对vue有一定了解后,才可以比较容易理解自定义组件.想要封装好一个组件,一定要熟练掌握这三个技能,父组件 -> 子组件传值(props).子组件 -& ...

  7. 四、vue基础--自定义组件

    1.语法:Vue.component("组件名字",{data,template}),代码如下: a. data: 必须是一个函数,有一个返回值.和vue里面的使用方法一样 b. ...

  8. Vue之自定义组件的v-model

    最近在学习vue,今天看到自定义事件的表单输入组件,纠结了一会会然后恍然大悟...官方教程写得不是很详细,所以我决定总结一下. v-model语法糖 v-model实现了表单输入的双向绑定,我们一般是 ...

  9. Vue.js 自定义组件封装实录——基于现有控件的二次封装(以计时器为例)

    在本人着手开发一个考试系统的过程中,出现了如下一个需求:制作一个倒计时的控件显示在试卷页面上.本文所记录的就是这样的一个过程. 前期工作 对于这个需求,自然我想到的是有没有现成的组件可以直接使用(本着 ...

随机推荐

  1. 简单易懂的 Go 泛型使用和实现原理介绍

    原文:A gentle introduction to generics in Go by Dominik Braun 万俊峰Kevin:我看了觉得文章非常简单易懂,就征求了作者同意,翻译出来给大家分 ...

  2. input 相关

    1.label 标签 for 属性同 input 标签 id 属性联系之一

  3. springboot处理blog字段

    springboot处理blog字段 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章https://www.javaman.cn/ 1.数据库表结构 其中content为long ...

  4. 一个登录点两个逻辑漏洞-edusrc

    最近呢, 也是基础漏洞学的差不多了, 就在edusrc上面实战, 刚开始搞一些信息泄漏啥的, 提交了十几个, 结果就他娘的通过了一个. 咱也就不碰信息泄漏了, 没得意思. 关于这个学校测试时也是有坑的 ...

  5. Flutter网络请求和数据解析

    一:前言 - 什么是反射机制,Flutter为什么禁用反射机制? 在Flutter中它的网络请求和数据解析稍微的比较麻烦一点,因为Flutter不支持反射机制.相信大家都看到这么一条,就是Flutte ...

  6. 解构HE2E中的Kubernetes技术应用

    摘要:我们从Kubernetes技术应用的角度解构华为云DevCloud HE2E DevOps实践. 本文分享自华为云社区<解构HE2E中的Kubernetes技术应用>,作者: 敏捷小 ...

  7. 羽夏 Bash 简明教程(上)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  8. Element中Tree树结构组件中实现Ctrl和Shift多选

    在Element中的树结构中, 实现多选功能,首先的是判断有没有按下键盘ctrl和shift按键.但是在Element中的tree组件的左键点击事件是没有提供$event鼠标属性判断的.所以就需要在函 ...

  9. 资讯:IEEE1

    IEEE 2020 年 12 大技术趋势:边缘计算.量子计算.AI.数字孪生等 2020-02-06 以下是对2020年12大技术趋势的预测.IEEE计算机协会自2015年以来一直在预测技术趋势,其年 ...

  10. Java测试报告

    测试题目:ATM机 程序说明:本程序中共包含了两个类,分别为Account类和AccountManager类 Account类代码: public class Account { private St ...