如何开发一个npm插件,并发布到npm官网

www.npmjs.com

创建一个vue-toast-demo目录

进入目录 cd vue-toast-demo

npm初始化  npm init

package name: (vue-toast-demo)  // 插件名
version: (1.0.0)                // 插件版本
description: a toast plugin for mobile // 插件的作用描述
entry point: (index.js)         // 插件入口
test command:                   // 测试脚本
git repository:                 // 大家把插件做完以后,可以上传到自己的github仓库,最后把github的地址贴近来,这样别人在下载你的插件的时候,就可以直接驱读你源码了,可以先留空,等代码上传github仓库之后把地址再拷贝下来
keywords: toast vue-toast 关键词
author: JackBean 作者
license: (ISC)

 

此时目录下就会有一个package.json文件。

在目录下建一个src目录,存放源码

在src下面建一个index.html文件,这个实际上是静态的,和我们的项目没有关系,我们只是演示一下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .toast-container{
            position: absolute;
            left: 0;
            top: 0;
            bottom: 0;
            right: 0;
            z-index: 2000;
            display: flex;
            justify-content: center; align-items: center; /* 这个两个属性在flex下可以使元素水平方向和垂直方向都剧中 */
        }
        .toast{
            width: 180px;
            height: 60px;
            line-height: 60px;
            text-align: center;
            background-color:rgba(0,0,0,0.61);
            border-radius: 10px;
            color: white;
        }
    </style>
</head>
<body>
<section class="toast-container">
    <div class="toast">
        <span>hello,Toast</span>
    </div>
</section>
</body>
</html>

在src下再建一个lib文件夹,建一个vue-toast.vue放进去

<template>
    <section class="toast-container">
        <div class="toast">
            <span>{{message}}</span>
        </div>
    </section>
</template>
<style lang='scss'>
    .toast-container{
        position: absolute;
        left: 0;
        top: 0;
        bottom: 0;
        right: 0;
        z-index: 2000;
        display: flex;
        justify-content: center; align-items: center; /* 这个两个属性在flex下可以使元素水平方向和垂直方向都剧中 */
        .toast{
        width: 180px;
        height: 60px;
        line-height: 60px;
        text-align: center;
        background-color:rgba(0,0,0,0.61);
        border-radius: 10px;
        color: white;
        }
    }

</style>
<script>
export default {
    data () {
        return {
            message: 'hello Toast'
        }
    }
}
</script>

我们分析一下这个.vue文件,我们webpack需要使用vue-loader来对这个文件进行解析,

其次scss还需要scss-loader进行解析

再其次里面有es6的语法,因此还需要babel-loader来解析

这是静态部分,最后我们要实现怎么去读这个vue文件.最后把它呈现出来

 

接下来我们需要建一个入口,在package.json里面,

就是main 就是别人在加载你的插件的时候希望先加载哪一个js脚本

{
  "name": "vue-toast-demo",
  "version": "1.0.0",
  "description": "a toast plugin for mobile",
  "main": "index.js", //就是别人在加载你的插件的时候希望先加载哪一个js脚本 [使用者此处不可有注释]
这个入口就是别人在调用你这个插件的时候会调用你这个index.js
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "toast",
    "vue-toast"
  ],
  "author": "JackBean",
  "license": "ISC"
}

webpack有一个入口文件,最后进行打包输出,

接着我们在lib目录下建一个入口文件叫做index.js

我们如何通过这个入口文件在打包的时候去编译我们的.vue文件

// 1.首先需要导入这个vue文件
import ToastCompinet from './vue-toast.vue'

// 2.定义一个Toast对象
let Toast = {};

// 3.给这个Toast添加一个静态的类 vue插件有一个原则必须要定义一个install方法 只有通过install方法才能被 vue.use()所引用
Toast.install = function (VUe,option) {

    // 默认配置
    var opt = {
        duration:3000

    }

    // 如果用户传了参数就去循环覆盖这个参数
    for(var key in options){
        opt[key] = options[key];
    }

    //5.通过Vue.prototype原型绑定一个函数 读取vue文件并进行解析
        // 说白了就是在Vue的原型上面驱拓展一个函数
    Vue.prototype.$toast = function (message,option) {

        if(typeof option == 'object'){
            for(var key in option){
                opt[key] = options[key];
            }
        }

        // 通过Vue.extend去继承这个组件 然后得到一个实例
        const ToastController = Vue.extend(ToastCompinet);

        // new出来的对象就是vue文件最终导出来的对象 并挂在到一个div里面去
           // 返回一个新的实例
        var instance = new ToastController().$mount(document.createElement('div')); 

        // 拿到这个实例之后,我们就可以控制这个实例的显示 比如给它赋值 但是赋的值一般是通过函数传进来的
        instance.message = message;
        instance.visible = true;

        setTimeout(()=>{
            instance.visible = false;
            document.body.removeChild(instance.$el);
        },opt.duration)
    }
    Vue.prototype.$toast['show']=function(message,option){
        Vue.prototype.$toast(message,option);
    }
    Vue.prototype.$toast['success']=function(message,option){
        Vue.prototype.$toast(message,option);
    }
    Vue.prototype.$toast['info']=function(message,option){
        Vue.prototype.$toast(message,option);
    }
    Vue.prototype.$toast['error']=function(message,option){
        Vue.prototype.$toast(message,option);
    }
}

// 4.通过export default进行输出 要不然 vue.use() 是找不到的
export default Toast;

接下来编写webpack配置来解析.vue文件以及.js文件

先在vue-toast-demo下建一个webpack.confog.js文件,这是webpack官方默认的文件,也可以不叫这个名字,如果不叫这个名字在打包的时候就需要去指定他的配置,所以做好默认叫webpack.config.js,这样就不用去指定他的配置文件了

安装webpack

npm i webpack@4.1.0  --save

安装loader和插件

npm i save vue-loader babel-preset-env babel-core

npm i --save vue-template-compiler

cnpm i sass-loader node-sass css-loader --save

demo地址 https://download.csdn.net/download/xyphf/10838084

->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->->

发布到npm官网

1、注册一个www.npmjs.com 网的账号

2、先搜索一下要发布的插件名字有没有,如有则不能使用这个名字

3、在package.json中的version写上版本号

4、命令行添加用户,就是注册完了以后,要把刚刚注册的用户加进来

npm adduser

然后填写大家刚刚注册的用户名和密码和注册的Email地址,

查询一下当前用户是谁:

npm whoami

发布插件

npm publish 这样就已经发布上去了

当然发布的时候,要写一些文档

README.md 文件,告诉别人如何使用该插件

重新发布,每次发布都必须修改package.json里面的version版本号,否则无法发布

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例,展示如何编写一个Vue3的npm插件: 1. 创建一个新的npm包并初始化 首先,创建一个新的目录,然后在该目录下运行以下命令来初始化npm包: ``` npm init -y ``` 这将创建一个package.json文件,其中包含有关您的npm包的信息。 2. 安装必要的依赖项 接下来,需要安装一些必要的依赖项,包括Vue3和rollup。运行以下命令: ``` npm install --save vue@next rollup rollup-plugin-commonjs rollup-plugin-node-resolve rollup-plugin-terser ``` Vue3是Vue.js的下一代版本,rollup是用于打包JavaScript的工具。 3. 创建插件代码 创建一个名为"index.js"的文件,该文件将包含您的插件代码。这里是一个简单的示例,它向Vue的全局对象添加了一个名为"myPlugin"的方法: ```js export function myPlugin() { console.log('Hello from myPlugin!'); } export default { install: (app) => { app.config.globalProperties.$myPlugin = myPlugin; }, }; ``` 4. 创建rollup配置文件 为了将您的插件打包到一个单独的JavaScript文件中,您需要创建一个名为"rollup.config.js"的文件。以下是一个示例配置文件: ```js import { terser } from 'rollup-plugin-terser'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; export default { input: 'index.js', output: { file: 'dist/myPlugin.js', format: 'umd', name: 'myPlugin', }, plugins: [ resolve(), commonjs(), terser(), ], }; ``` 这将创建一个名为"dist/myPlugin.js"的文件,其中包含已打包的插件代码。 5. 编译和发布插件 最后,您需要使用rollup命令来编译插件代码,并使用npm命令将插件发布npm仓库中: ``` npx rollup -c npm login npm publish ``` 现在,您的Vue3插件已经准备好使用了!在Vue应用程序中安装插件的方法如下: ```js import { createApp } from 'vue'; import myPlugin from 'my-plugin'; const app = createApp({}); app.use(myPlugin); app.mount('#app'); ``` 希望这个简单的示例可以帮助您开始编写Vue3插件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值