一、使用 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. docker使用详解

    一.docker简介 docker 是一个开源的应用容器引擎,docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  2. OAuth2授权服务器Id Server一键生成配置原理

    OAuth2客户端的配置参数非常多,虽然Id Server通过控制台可视化解决了创建OAuth2客户端的问题.但是如何进一步降低OAuth2的使用难度,把创建的OAuth2客户端转化为配置成为了刚需, ...

  3. 管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介

    管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介 管家婆 工贸版(标准财务+进销存+生产管理) 1.整体介绍 管家婆工贸版系列软件是针对国内中小型生产加工企业,将ERP管理思想与几十万 ...

  4. 好客租房8-React基础阶段总结

    React总结 1react是构建用户组件的javascript库 2使用react是,推荐使用脚手架方式 3初始化项目命令:npx create-react-app my-app 4启动项目命令:y ...

  5. mysql查询关键字补充与多表查询

    目录 查询关键字补充 having过滤 distinct去重 order by排序 limit分页 regexp正则 多表查询 子查询 连表查询 查询关键字补充 having过滤 关键字having和 ...

  6. python之模块(os、sys、json、subprocess)

    目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...

  7. git clone 问题

    转自 git clone出现 fatal: unable to access 'https://github.com/...'的解决办法(亲测有效) - 山村码农 - 博客园 (cnblogs.com ...

  8. 论文解读(SUBLIME)《Towards Unsupervised Deep Graph Structure Learning》

    论文信息 论文标题:Towards Unsupervised Deep Graph Structure Learning论文作者:Yixin Liu, Yu Zheng, Daokun Zhang, ...

  9. 面试常问的dubbo的spi机制到底是什么?

    前言 dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力.作为spring cloud alibaba体系中重要的一部分,随着spring cloud alibaba在 ...

  10. ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

    Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+MySQL,性能.可用 ...