npm 发包 保姆级教程 发布一个属于自己的npm包吧!

话不多说马上开始 发布属于自己的npm包 GO GO GO !

- 注册属于自己的npm账号 登录npm官网

- 准备好环境

Download node.js

Download vue.js

- Vue封装组件并发布到npm仓库

使用Vue框架进行开发,组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使用,甚至我们可以直接从npm仓库下载别人封装好的组件来进行使用,比如iview、element-ui这一类的组件库。但是每个公司的业务场景可能不同,开发人员还是得必须封装自己得组件,如果换了一个项目,那么我们就只能复制组件代码到新的项目里面去了,这样稍显麻烦,其实我们可以将组建上传到npm仓库,要用的时候可以直接从npm安装使用

1. 初始化Vue项目

vue create my-app

2. 运行项目

cd my-app npm run serve

- 准备封装小组件-通用方法

1. 新建package文件夹

在src下面新建一个package文件夹用来存放所有需要上传的组件和方法。

这里我们打算封装1个组件:zsl-button ,1个通用方法:public-js ,所以在package文件夹下面分别新建了存放两个组件代码的文件夹。

2. 编写组件代码和通用方法

这里我们就以zsl-button组件为例,任意编写一点代码,代码如下:

<!-- 复制代码
<template>
<!-- package/zsl-button/index.vue -->
  <div>
    <button>test按钮</button>
  </div>
</template>
<script>
export default {
  name: "zsl-button", //组件名
};
</script>
<style scoped>
button {
  z-index: 1;
  position: relative;
  font-size: inherit;
  font-family: inherit;
  color: white;
  padding: 0.5em 1em;
  outline: none;
  border: none;
  background-color: hsl(236, 32%, 26%);
  overflow: hidden;
  transition: color 0.4s ease-in-out;
}

button::before {
  content: "";
  z-index: -1;
  position: absolute;
  top: 100%;
  right: 100%;
  width: 1em;
  height: 1em;
  border-radius: 50%;
  background-color: #3cefff;
  transform-origin: center;
  transform: translate3d(50%, -50%, 0) scale3d(0, 0, 0);
  transition: transform 0.45s ease-in-out;
}

button:hover {
  cursor: pointer;
  color: #161616;
}

button:hover::before {
  transform: translate3d(50%, -50%, 0) scale3d(15, 15, 15);
}
</style>

这里我们就以public-js方法为例,任意编写一点代码,代码如下:index.js

// 复制代码
// package/public-js/index.js
import { handleFirstUpperCase, handleDrawDownHump } from "./letter.js";
import { handleRoundOff } from "./num.js";
export default { handleFirstUpperCase, handleDrawDownHump, handleRoundOff };

letter.js方法

// 复制代码
// package/public-js/letter.js
// 处理首字母大小
export function handleFirstUpperCase(str) {
  return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
}

num.js方法

//package/public-js/num.js 复制代码
// package/public-js/num.js
// 四舍五入Math.round(number)
export function handleRoundOff(val) {
  return val && Math.round(val);
}

然后我们引用到App.vue组件里面验证一下,看是否组件可用,代码如下:

<!-- 复制代码
<!-- src/App.vue -->
<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <ZSLButton />
  <p>字母:{{ msg }}</p>
  <p>
    首字母大写:<span>{{ handleFirstUpperCase(msg) }}</span>
  </p>
  <p>数字{{ nums }}</p>
  <p>
    四舍五入:<span>{{ handleRoundOff(nums) }}</span>
  </p>
</template>

<script>
import { ref, defineComponent } from "vue";
import ZSLButton from "./package/zsl-button/index.vue";
import {
  handleFirstUpperCase,
  handleRoundOff,
} from "./package/public-js/index.js";

export default defineComponent({
  components: {
    ZSLButton,
  },
  setup() {
    const msg = ref("setup script");
    const nums = ref(17.6);
    return { msg, nums, handleFirstUpperCase, handleRoundOff };
  },
});
</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;
}
p {
  margin: 40px 0;
}
span {
  color: #1677ff;
}
</style>
3. ### 使用Vue插件模式

这一步是封装组件中的重点,用到了Vue提供的一个公开方法:install。这个方法会在你使用Vue.use(plugin)时被调用,这样使得我们的插件注册到了全局,在子组件的任何地方都可以使用。

在package目录下新建index.js文件,代码如下:

//package/index.js 复制代码
//package/index.js
import ZSLButton from "../package/zsl-button/index.vue"; // 引入封装好的组件
import publicjs from "../package/public-js/index.js"; // 引入封装好的方法
const coms = [ZSLButton]; // 将来如果有其它组件,都可以写到这个数组里

// 批量组件注册
const install = function (Vue) {
  coms.forEach((com) => {
    Vue.component(com.name, com);
  });
};

export default { install, publicjs }; // 这个方法以后再使用的时候可以被use调用
4. 组件打包

到这里为止,我们的组件封建基本就完成了,当然组件封装成什么样得看自己得业务需求了,接下来我们就需要将组件进行打包了。

修改我们项目得package.json文件,配置打包命令:

package": "vue-cli-service build --target lib ./src/package/index.js --name zsl-ui --dest zsl-ui

打包命令解释:

  • --target lib 关键字 指定打包的目录
  • --name 打包后的文件名字
  • --dest 打包后的文件夹的名称

然后执行打包命令:

npm run package

打包执行完成后我们项目目录下就会多出一个zsl-ui文件夹,存放的是打包后的文件。

- 发布到npm

1. 初始化package.json

想要发布到npm仓库,我们还得在pig-ui文件夹下初始化一个package.json文件。进入pig-ui目录,执行命令:

npm init -y

由于这里我们只是测试,所以我不需要更改package.json文件,如果是生产的话,最好加上版本描述和版本号等等,其中name字段便是我们上传到npm仓库后的名称。

2. 发布到npm仓库
1.注册账号

想要发布到npm仓库,就必须要有一个账号,先去npm官网注册一个账号,注意记住用户名、密码和邮箱,发布的时候可能会用到。

2.设置npm源

有些小伙伴可能本地的npm镜像源采用的是淘宝镜像源或者其它的,如果想要发布npm包,我们得吧我们得npm源切换为官方得源,命令如下:

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

3.添加npm用户

进入zsl-ui目录,添加npm用户,执行命令: npm adduser

这里会让你填写用户名等等,如果之前设置过即可跳过此步。

4.发布npm

在zsl-ui目录下执行命令:npm publish

如果发布失败可能是名字重复了,改了名字即可,发布成功后,我们即可到npm光网上查看自己发布得npm包:

- 从npm安装使用

直接执行安装命令:npm install zsl-ui-test // 由于名字重复,改了个名字

- main.js引用注册,代码如下:

//src/main.js 复制代码
//src/main.js
import { createApp } from "vue";
import App from "./App.vue";
import TestUi from "zsl-ui-test"; //引入包
import "../node_modules/zsl-ui-test/zsl-ui.css"; //引入包样式
const app = createApp(App);
app.config.globalProperties.public = TestUi.publicjs; //公共方法
app.use(TestUi.install); //注册组件
app.mount("#app");

这里单独引用了css,就和element-ui一样需要单独引入样式文件。

修改App.vue文件,直接使用组件zsl-button,首字母大写等、四舍五入方法 代码如下:

//src/App.vue 复制代码
<!-- src/App.vue -->
<template>
  <img alt="Vue logo" src="./assets/logo.png" />
  <zsl-button />
  <p>字母:{{ msg }}</p>
  <p>
    首字母大写:<span>{{ handleFirstUpperCase(msg) }}</span>
  </p>
  <p>数字{{ nums }}</p>
  <p>
    四舍五入:<span>{{ handleRoundOff(nums) }}</span>
  </p>
</template>

<script>
import { getCurrentInstance, ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const { proxy } = getCurrentInstance();
    const msg = ref("setup script");
    const nums = ref(17.6);
    const handleFirstUpperCase = proxy.public.handleFirstUpperCase;
    const handleRoundOff = proxy.public.handleRoundOff;
    return { msg, nums, handleFirstUpperCase, handleRoundOff };
  },
});
</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;
}
p {
  margin: 40px 0;
}
span {
  color: #1677ff;
}
</style>

展示如下:

到这里我们的组件和方法就封装好了,并且可以直接从npm仓库下载使用。

总结

总体说来Vue组件封装发布到npm仓库整体难度不大,主要是理解Vue的install方法以及打包相关知识,其实最重要的还是如何封装一个适用范围广,扩展性高的公用组件。

此项目源码地址 github.com/zsl1549/zsl...

欢迎小伙伴 一键3连 star fork 关注不迷路

有不清楚的小伙伴欢迎留言

原作者 会飞的猪

相关推荐
计算机魔术师20 分钟前
管谷歌的不是Pichai一个人,是一整层AI智能体
前端
米米商聊24 分钟前
图标能点,按钮就可用了吗?键盘、名称与收藏状态
前端·javascript
Younglina1 小时前
三个晚上,我和 WorkBuddy 做了个生图网站
前端·后端·ai编程
xy34531 小时前
Axure 9.0 内联框架加载方式
前端·ui·html·axure·原型·产品设计
陈随易2 小时前
副业搞钱点子之收入查看器
前端·后端
Profile排查笔记2 小时前
浏览器指纹逆向怎么分析:从网络请求追踪到 JavaScript 采集链
前端·人工智能·后端·自动化
hudie7653 小时前
LikeShop 二开最常改的 5 个文件(附改前改后对比)
前端·uni-app·php·个人开发
qetfw3 小时前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
鬼手点金4 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
Shadow(⊙o⊙)4 小时前
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
java·服务器·前端·1024程序员节