vue 下载的插件从哪里上传?npm发布插件详细记录

文章参考:

参考文章一:

封装vue插件并发布到npm详细步骤_vue-cli 封装插件-CSDN博客

参考文章二:

npm发布vue插件步骤、组件、package、adduser、publish、getElementsByClassName、important、export、default、target、dest_export default install-CSDN博客

背景:

我想把我写的一个JS发布成一个插件,这样就可以通过"npm"命令去实现安装插件

如:

bash 复制代码
npm install 插件名称  

bash 复制代码
npm i 插件名称  

第一步:创建项目

bash 复制代码
 vue create jjychengtoolsbox

如果你赶时间,下面的错误记录可以跳过 ,直接看第二步

如果你赶时间,下面的错误记录可以跳过 ,直接看第二步

如果你赶时间,下面的错误记录可以跳过 ,直接看第二步

我这里报错了

bash 复制代码
 ERROR  Failed to get response from https://registry.npm.taobao.org/binary-mirror-config

ERROR Failed to get response from https://registry.npm.taobao.org/binary-mirror-config

网上找了找说是 我的淘宝镜像源无效

查看npm的镜像源

bash 复制代码
npm config get
html 复制代码
; "builtin" config from C:\Program Files\nodejs\node_modules\npm\npmrc

prefix = "C:\\Users\\cpeng\\AppData\\Roaming\\npm"

; "user" config from C:\Users\cpeng\.npmrc

python = "C:\\Users\\cpeng\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
Python = "C:\\Users\\cpeng\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
registry = "https://registry.npm.taobao.org/"
sass_binary_site = "https://npm.taobao.org/mirrors/node-sass"

; node bin location = C:\Program Files\nodejs\node.exe
; cwd = D:\2 CodeTest\JJYChengScrollListening.js\VuePackage_JJYChengSL
; HOME = C:\Users\cpeng
; Run `npm config ls -l` to show all defaults.

应该是这2个出现了问题

bash 复制代码
registry = "https://registry.npm.taobao.org/"
sass_binary_site = "https://npm.taobao.org/mirrors/node-sass"

修改镜像源,修改为官方的

bash 复制代码
npm config set registry https://registry.npmjs.org
bash 复制代码
npm config set sass_binary_site https://registry.npmjs.org

查看修改结果

bash 复制代码
npm config get
bash 复制代码
; "builtin" config from C:\Program Files\nodejs\node_modules\npm\npmrc

prefix = "C:\\Users\\cpeng\\AppData\\Roaming\\npm"

; "user" config from C:\Users\cpeng\.npmrc

python = "C:\\Users\\cpeng\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
Python = "C:\\Users\\cpeng\\AppData\\Local\\Programs\\Python\\Python37\\python.exe"
registry = "https://registry.npmjs.org/"
sass_binary_site = "https://registry.npmjs.org"

; node bin location = C:\Program Files\nodejs\node.exe
; cwd = D:\2 CodeTest\JJYChengScrollListening.js\VuePackage_JJYChengSL
; HOME = C:\Users\cpeng
; Run `npm config ls -l` to show all defaults.

这么看的话,应该是没有问题了

继续创建项目

bash 复制代码
vue create vuepackage_jjychengsl

继续报错

网上找了找说是缓存问题

更新npm缓存

bash 复制代码
npm cache clean --force

这个样子应该是更新好了

继续创建项目

记得把文件夹下面,之前创建的项目文件夹给删了

不删的话也行,你创建项目它会提示你,你选择 覆盖(Overwrite)就行了

bash 复制代码
vue create vuepackage_jjychengsl     

我这里选择vue2

继续报错误,实在是无语了。。。

清空npm缓存

其实,上面也警告了,我没注意

bash 复制代码
npm WARN using --force Recommended protections disabled.

大致意思是被禁用了,不能用

使用"npm cache verify"

bash 复制代码
npm cache verify

【*】问题完整解决过程和解决方法

我这里不再重复写了,项目完整的解决方法和记录,请点击下面文章

文章地址:

【已解决】ERROR Failed to get response from https://registry.npm.taobao.org/binary-mirror-config,完成解决方法

【已解决】ERROR Failed to get response from https://registry.npm.taobao.org/binary-mirror-config,完成解决方法-CSDN博客


第二步:新建插件

此时你的目录结构应该是这样的,如下图

在 "根目录\src\"下新建npmPackage文件夹

在新建的npmPackage文件夹下,新建jjychengtoolsbox.js文件

新建的jjychengtoolsbox.js文件,内容如下:

javascript 复制代码
var jjychengtoolsbox = {};
// 检查是否手机端访问
jjychengtoolsbox.IsMobileFun = function () {
  if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i))) {
    return true;
  }
  else {
    return false;
  }
}
export default jjychengtoolsbox;

如果你发布的是"组件"的一定要看看这篇文章

如果你发布的是"组件"的一定要看看这篇文章

如果你发布的是"组件"的一定要看看这篇文章

封装vue插件并发布到npm详细步骤_vue-cli 封装插件-CSDN博客

主要是这段代码

javascript 复制代码
import wqButton from './wqButton/index.vue'
import wqClock from './wqClock/index.vue'

const comArr = [wqButton, wqClock];

// 注册组件
export default install = (Vue) => {
    comArr.forEach(item => {
        Vue.component(item.name, item)  // item.name就是引入组件中的name属性,所以每个组件都需要name
    })
};

使用Vue提供的install方法,这个方法会在使用Vue.use(plugin)时被调用,这样就能让我们需要导出的组件注册到全局, 就可以在任意组件中像使用子组件一样直接使用导出的组件


第三步:插件打包

此时你的项目目录是这样的,如下图

在跟节点找到"package.json"文件,并打开他,找到"scripts"节点,新增下面内容

javascript 复制代码
{"package": "vue-cli-service build --target lib ./src/npmPackage/jjychengtoolsbox.js --name jjychengtoolsbox --dest jjychengtoolsbox"
}

内容介绍

bash 复制代码
--target lib 指定打包的目录
--name 打包后的文件名
--dest 打包后的文件夹名称

"scripts"节点完整代码

javascript 复制代码
  "scripts": {
    "dev": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "package": "vue-cli-service build --target lib ./src/npmPackage/jjychengtoolsbox.js --name jjychengtoolsbox --dest jjychengtoolsbox"
  },

执行打包命令

bash 复制代码
npm run package

打包好后的,你的根目录会多一个刚才你命名的文件夹,如下图

里面的文件如下


第四步:完善你的插件信息

4.1增加package.json文件

注意文件里不能有注释

注意文件里不能有注释

注意文件里不能有注释

我的信息如下:

javascript 复制代码
{
  "name": "jjychengtoolsbox",
  "version": "1.0.2",
  "description": "jjychengtoolsbox常用工具箱",
  "main": "jjychengtoolsbox.common.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "获取URL参数",
    "获取Cookie",
    "设置Cookie",
    "时间万能转换-兼容IE",
    "截取字符串",
    "过滤全部html",
    "生成随机数",
    "检查是否手机端访问"
  ],
  "author": "JJY.Cheng blogUrl:https://cplvfx.blog.csdn.net/",
  "license": "ISC"
}

字段说明:

javascript 复制代码
{
    "name": "",  // 发布的包名,发布线上后,可以通过 npm install 该名称 来引用该包
    "version": "0.0.0",  // 版本号
    "description": "",  // 描述
    "main": "",  // // 打包后的入口文件,若不配置,则在其他项目中就无法使用import xx from '包名'来引入组件,只能以包名作为起点来指定相对路径
    "scripts": {  // 运行命令
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [  // 关键词,可以通过npm搜索你填写的关键词找到你的包
        ],
    "author": "cplvfx",  // 作者
    "private": false,  // 是否设为私有包
    "license": "ISC"  // 代码授权许可
}

你也可以通过下面命令生成文件

bash 复制代码
npm init -y

但,必须保证,生成文件时,你的命令路径是在,打包好的文件夹下;

但,必须保证,生成文件时,你的命令路径是在,打包好的文件夹下;

但,必须保证,生成文件时,你的命令路径是在,打包好的文件夹下;

如我的

4.2增加README.md文件

我的内容如下

bash 复制代码
# jjychengtoolsbox

## 介绍
"获取URL参数",
"获取Cookie",
"设置Cookie",
"时间万能转换-兼容IE",
"截取字符串",
"过滤全部html",
"生成随机数",
"检查是否手机端访问"

## 作者
 "author": "JJY.Cheng",
 "blogUrl":https://cplvfx.blog.csdn.net/"
 

第五步:注册并登录的npm

保持你的命令路径在生成包的目录下,

保持你的命令路径在生成包的目录下,

保持你的命令路径在生成包的目录下,

接下来不在提示

5.1 注册

可去npm官网注册: https://www.npmjs.com

5.2 登录

5.2.1检查镜像源

检查镜像源是否是npm官方镜像源,如果不是就需要设置;

检查镜像源是否是npm官方镜像源,如果不是就需要设置;

检查镜像源是否是npm官方镜像源,如果不是就需要设置;

查看命令

bash 复制代码
npm config list

如下图,我的就不是

执行修改命令

bash 复制代码
npm config set registry=https://registry.npmjs.org

修改后

5.2.2 登录

登录命令

bash 复制代码
npm login

依次输入账号、密码、邮箱以及邮箱里收到的一次性密码,

如果输入邮箱之后一直卡在那里不动的话可以试试

bash 复制代码
npm login -d

第六步:发布

发布之前可去npm官网搜索一下你这个包名是否跟里面的包有重名的,

有的话不能发,也可以使用命令测试

bash 复制代码
npm i 你的包名

6.1执行发布命令

bash 复制代码
npm publish

你可以npm官网搜索你的插件

npm | Home

6.2更新插件

更新插件,从第三步到第六步操作一遍就行了。

记得一定要去插件目录下,package.json文件,修改version节点的值


安装使用

安装代码

bash 复制代码
npm i jjychengtoolsbox

引入

javascript 复制代码
import jjychengtoolsbox from 'jjychengtoolsbox';

使用

html 复制代码
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <table border="1" style="margin:0 auto;">

      <tr>
        <td>名称</td>
        <td>描述</td>
        <td>例子</td>
      </tr>

      <tr>
        <td>GetQueryStringFun<br/>根据名称获取URL参数</td>
        <td>
          <p>如url:http://localhost:8081/?id=1</p>
          <p>我想拿到id的值</p>
        </td>
        <td>
          id={{jjyT.GetQueryStringFun('id')}}
        </td>
      </tr>

      <tr>
        <td>getCookieFun<br/>获取Cookie</td>
        <td>
          <p>如:</p>
          <p>jjyT.setCookieFun('jjyT','jjychengtoolsbox',1)</p>
        </td>
        <td>
          {{jjyT.getCookieFun('jjyT')}}
        </td>
      </tr>

      <tr>
        <td>DateTimeConvertFun<br/>时间万能转换-兼容IE</td>
        <td>
          如:<br/>
          时间戳:1709977671<br/>
          时间字符串:2024-3-9 17:47:51<br/>
        </td>
        <td>
          时间戳:{{jjyT.DateTimeConvertFun('1709977793','yyyy年mm月dd日')}}<br/>
          时间字符串:{{jjyT.DateTimeConvertFun('2024-3-9 17:47:51','yyyy年mm月dd日')}}<br/>
        </td>
      </tr>


    </table>
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';
import jjychengtoolsbox from 'jjychengtoolsbox';
export default {
  name: 'App',
  components: {
    HelloWorld
  },
  data(){
    return {
      txt:'你号',
      jjyT:{},
    }
  },
  created(){
    this.jjyT=jjychengtoolsbox;
    console.log(this.txt)
    console.log(jjychengtoolsbox)
    //设置Cookie
    this.jjyT.setCookieFun('jjyT','jjychengtoolsbox',1);//设置Cookie
  }
}
</script>

<style>
#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;
}
table{
  width: 800px;
}
table td{
  text-align: left;
}
</style>

更新

bash 复制代码
npm update jjychengtoolsbox
相关推荐
ywf12151 小时前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端
恋猫de小郭1 小时前
2026,Android Compose 终于支持 Hot Reload 了,但是收费
android·前端·flutter
hpoenixf7 小时前
2026 年前端面试问什么
前端·面试
还是大剑师兰特7 小时前
Vue3 中的 defineExpose 完全指南
前端·javascript·vue.js
泯泷7 小时前
阶段一:从 0 看懂 JSVMP 架构,先在脑子里搭出一台最小 JSVM
前端·javascript·架构
mengchanmian8 小时前
前端node常用配置
前端
华洛8 小时前
利好打工人,openclaw不是企业提效工具,而是个人助理
前端·javascript·产品经理
xkxnq8 小时前
第六阶段:Vue生态高级整合与优化(第93天)Element Plus进阶:自定义主题(变量覆盖)+ 全局配置与组件按需加载优化
前端·javascript·vue.js
A黄俊辉A9 小时前
vue css中 :global的使用
前端·javascript·vue.js
小码哥_常10 小时前
被EdgeToEdge适配折磨疯了,谁懂!
前端