前言

我这里是写了一个vue轮播图插件,因此我使用了vue的脚手架工具创建一个项目,当然你也可以选择自己搭建脚手架。

本例中我会使用vue脚手架创建一个项目,并发布到npm上面去。

通过脚手架创建项目

全局安装

首先,要创建项目,封装vue的插件用webpack-simple很合适,因此你需要全局安装@vue/cli-init插件:

yarn global add @vue/cli-init
//或者
npm install @vue/cli-init -g

使用vue init webpack-simple vue-test-plugin 初始化目录; vue-test-plugin是项目名称,也是新建项目的目录。

然后我使用全局安装失败了,那么我就使用局部安装把。

局部安装

新建D:/test test文件夹,局部安装@vue/cli-init插件:

yarn add @vue/cli-init
//或者
npm install @vue/cli-init

安装成功之后,使用命令初始化vue-test-plugin项目:

./node_modules/.bin/vue init webpack-simple vue-test-plugin

然后就一路enter直到项目创建完成。创建完成后的目录如下:

插件开发

./src/目录下实现你自己的功能,我的功能实现完了之后如下:

./src/lib/banner.vue:是主功能文件

./src/lib/index.js

import VueBanner from './banner.vue'
const plugin = {
install: function(Vue) {
Vue.component(VueBanner.name, VueBanner)
}
}
// 这里的判断很重要
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(plugin)
}
export default plugin

我们在webpack配置的入口文件就是index.js,install是挂载组件的方法,有了它我们就可以在外部use一个插件了。

如果外部使用<script>引入的话window存在,window.Vue.use(plugin)就直接将插件挂在在全局了。

修改文件配置

package.json 文件

{
"name": "vue-test-plugin",
"description": "vue的插件测试",
"version": "1.0.1",
"author": "姓名 <xxx@xxx.com>",
// 配置main结点,如果不配置,我们在其他项目中就不用import XX from '包名'来引用了,只能以包名作为起点来指定相对的路径
"main":"dist/vue-test-plugin.js",
//开源协议
"license": "MIT",
// 因为组件包是公用的,所以private为false
"private": false,
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
},
// 指定代码所在的仓库地址
"repository": {
"type": "git",
"url": "git+xxxxx" //这里写github的git地址,格式为:'git+' + gitHubURL
},
"dependencies": {
"vue": "^2.5.11"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
],
// 指定关键字
"keywords": [
"vue",
"test-plugin"
],
// 项目官网的url
"homepage": "github地址下的readme.md文件地址",
"devDependencies": {
...
}
}

webpack.config.js 文件

  // entry: './src/main.js',
entry: './src/lib/index.js',
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
// filename: 'build.js'
filename: '/vue-test-plugin.js',
library: 'VueTestPlugin',
libraryTarget: 'umd',
umdNamedDefine: true
},

由于不是所有使用组件的人都是通过 npm 安装使用 import 引入组件的,还有很多人是通过 <script>标签的方式直接引入的,所以我们要将 libraryTarget 改为 umd 格式,同时我们要配置文件入口和出。

.gitignore 文件

dist/  //删除此行

因为要用dist文件夹,所以在.gitignore文件中把dist/去掉。

index.html 文件

    <!-- <script src="/dist/build.js"></script> -->
<script src="/dist/vue-test-plugin.js"></script>

打包

yarn build
//或者
npm run build

因为在import的时候,自动会加载packge.json文件中的main中的路径,我这里是:dist/vue-test-plugin.js,因此会去读取这个文件,所以需要打包。

发布npm

  • 1.注册npm官网账号
  • 2.切换到vue-test-plugin根目录下,添加npm账号:npm adduser
  • 3.输入自己的npm用户名、密码、邮箱。
  • 4.上传代码:npm publish

发布出现问题:npm ERR! publish Failed PUT 403

如果发布过程中出现此问题是因为使用了淘宝镜像,需要切换成原来的镜像,发布成功后,再切回来。

检查是否使用了淘宝镜像

npm config get registry

出现如下结果:

https://registry.npm.taobao.org/

如果出现如上结果,继续下一步

切换成原来的npm源

npm config set registry=http://registry.npmjs.org

继续npm publish发布npm包。

切回淘宝镜像

npm config set registry=https://registry.npm.taobao.org/

发布一个npm包的更多相关文章

  1. 如何发布一个npm包(基于vue)

    前言:工作的时候总是使用别人的npm包,然而我有时心底会好奇自己如何发布一个npm包呢,什么时候自己的包能够被很多人喜欢并使用呢...今天我终于迈出了第一步. 前提:会使用 npm,有 vue 基础, ...

  2. 从0到1发布一个npm包

    从0到1发布一个npm包 author: @TiffanysBear 最近在项目业务中有遇到一些问题,一些通用的方法或者封装的模块在PC.WAP甚至是APP中都需要使用,但是对于业务的PC.WAP.A ...

  3. 发布一个npm包(webpack loader)

    发布一个npm包,webpack loader: reverse-color-loader,实现颜色反转. 初始化项目 mkdir reverse-color-loader cd ./reverse- ...

  4. (转)前端开发-发布一个NPM包之最简单易懂流程

    原文地址:https://www.cnblogs.com/sghy/p/6829747.html 1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站 ...

  5. 如何发布一个npm包?

    npm包在现在前端开发中经常使用且便利,而我也是经常使用,而没研究怎么去发布npm.那如何发布npm包呢? 一.在npm的官网上注册一个账号登录,https://www.npmjs.com/ 注意此步 ...

  6. 如何发布一个 npm 包

    一 背景 在工作时,突然接到经理的一个要求,需要将一个react的高阶组件函数封装成一个npm包.之前从没弄过,当场还是有些懵逼的,但是这毕竟是工作,不能推脱.于是开始了学习.汤坑之旅.最终包发布,线 ...

  7. webpack创建library及从零开始发布一个npm包

    最近公司有个需求,我们部门开发一个平台项目之后,其他兄弟部门开发出的插件我们可以拿来直接用,并且不需要我们再进行打包,只是做静态的文件引入,研究一波后发现,webpack创建library可以实现. ...

  8. 如何发布一个包到npm && 如何使用自己发布的npm包 && 如何更新发布到npm的package && 如何更新当前项目的包?

    如何发布一个包到npm First 在https://www.npmjs.com注册一个账号. Second 编辑好项目,文件大致如下: 其中,gitignore可以如下: .DS_Store nod ...

  9. 如何开发一个npm包并发布到npm中央仓库

    转自: https://liaolongdong.com/2019/01/24/publish-public-npm.html 如何开发一个npm包并发布到npm中央仓库需求背景:平时在项目工作中可能 ...

随机推荐

  1. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析

    Office文件的奥秘——.NET平台下不借助Office实现Word.Powerpoint等文件的解析 分类: 技术 2013-07-26 15:38 852人阅读 评论(0) 收藏 举报 Offi ...

  2. phalcon: 按年分表的model怎么建?table2017,table2018...相同名的分表模型怎么建

    phalcon: 按年分表的model怎么建?table2017,table2018...相同名的分表模型怎么建 场景:当前有一张表:Ntime,因为表太大了,考虑要分表: Ntime2017 Nti ...

  3. 列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩

    Column-store compression At a high level, doc values are essentially a serialized column-store. As w ...

  4. python基础-条件语句if

    if语句: if 判断条件: 执行语句 else: 执行语句 flag = Falsename = 'huipaodexiong'if name == 'python':    flag = True ...

  5. Tomcat报错:HTTP Status 500 - Wrapper cannot find servlet class

    HTTP Status 500 - Wrapper cannot find servlet class com.servlet.servlet.RegServlet or a class it dep ...

  6. Convolutional Neural Networks for Visual Recognition 5

    Setting up the data and the model 前面我们介绍了一个神经元的模型,通过一个激励函数将高维的输入域权值的点积转化为一个单一的输出,而神经网络就是将神经元排列到每一层,形 ...

  7. 用Rem来无脑还原Web移动端自适应的页面

    (function (win,doc){ if (!win.addEventListener) return; var html=document.documentElement; function ...

  8. ffmpeg推流命令参数记录

    列出我们本机的设备:ffmpeg -list_devices true -f dshow -i dummy .\ffmpeg -r 25 -f dshow -s 640*480 -i video=&q ...

  9. Python 转义字符中没有这个 「\e」 !

    问题来源于技术交流群里: 常见的转义字符 \n.\t 之类的我们都知道什么意思,但是这个 \e 是什么意思呢? 抱着一股钻研的精神,我搜了一把. 结果,所有的页面里都是只有一句简单的 \e 代表转义. ...

  10. 为什么对象序列化要定义serialVersionUID

    对于实现了java.io.Serializable接口的实体类来说,往往都会手动声明serialVersionUID,因为只要你实现了序列化,java自己就会默认给实体类加上一个serialVersi ...