如何从0到1开发自己的npm包

前言

创建一个项目,主要用于封装常用函数utils和校验函数validation,项目名称为npm-utils

注册一个npm账号

官网:www.npmjs.com/

初始化

npm init初始化,创建一个package.json包,package.json文件结构大概如下:

  • main:文件入口
  • name:项目名称
  • version:项目版本
  • author:作者

登录npm

npm login:登录npm

npm whoami:你是谁

更换npm镜像

由于外网访问限制,一般使用淘宝镜像,所以如果是使用淘宝镜像,需要更换到npm镜像

npm config get registry:检查镜像源

powershell 复制代码
# 换成淘宝镜像源
npm config set registry https://registry.npmmirror.com/

# 换成官方镜像源
npm config set registry https://registry.npmjs.org/

# 查看镜像源
npm get registry

这里不是使用淘宝镜像,所以不用重新设置镜像源。

注意:如果更换了镜像源,需要重新登录npm

上传包

npm publish:上传包,报错如下:

npm profile get --json:查看npm配置

原因:npm账户没有进行2fa验证

关于双重身份验证 | npm 中文网

需要在npm官网配置2FA,注意需要用【手机照相机】扫描二维码,即会验证成功

npm publish 还是报错:所以以上思路错误

注意:进行2fa验证之后,之后登录、上传都是2fa,默认使用2fa验证,禁用2fa验证可以使用---从命令行删除 2FA

经过搜索,发现403大概是以下几个原因:

  1. 电子邮件尚未验证,因此请先通过 npmjs.com 验证您的电子邮件
  2. 其他人正在使用相同的包名,因此它必须是唯一的。因此请选择一个唯一的名称。您可以在 package.json 文件下更改名称。
  3. 如果您要重新发布相同的软件包并进行更改,则需要更改版本,例如将 1.0.0 更改为 1.0.1。您也可以在 package.json 文件下更改版本名称。

参考链接:stackoverflow.com/questions/5...

于是修改package.json:将 name由npm-utils改为npm-utils123,将version由1.0.0改为1.0.1

最后成功了!!!

修改版本号

大概以下两个方法:

  1. 手动修改:package.json-->version
  2. 命令修改:
    1. 大改:npm version major
    2. 中改:npm version minor
    3. 小改:npm version patch

暴露方法

你必须使用exports暴露你的方法,如下定义了一个npmTest的方法然后暴露出来,才能在安装这个包之后使用require引入

javascript 复制代码
exports.npmTest = (name) => {
  console.log(name)
}

从命令行删除 2FA

  1. 如果你在命令行上注销,请使用 <font style="color:rgb(31, 35, 40);">npm login</font> 命令登录。
  2. 在命令行上,键入以下命令:

<font style="color:rgb(31, 35, 40);">npm profile disable-2fa</font>

  1. 出现提示时,输入你的 npm 密码:

<font style="color:rgb(57, 58, 52);background-color:rgb(246, 248, 250);"> npm password:</font>

  1. 当系统提示你输入一次性密码时,请从你的身份验证器应用中输入密码:

<font style="color:rgb(57, 58, 52);background-color:rgb(246, 248, 250);">Enter one-time password from your authenticator: 123456</font>

使用npm包

安装使用

  1. 创建一个项目--useUtils
  2. 安装包---npm i npm-utils123

报错:npm ERR! Unsupported URL Type "link:": link:./src/types

原因:用了不同的包管理工具安装他,之前用的是pnpm install

解决办法:继续使用pnpm,pnpm i npm-utils123

参考链接:stackoverflow.com/questions/7...

安装成功之后,使用import导入部分函数,测试成功与否,这里我建的是一个vue项目,大概使用如下:

vue 复制代码
<script setup lang="ts">
  import { ref } from "vue";
  import { isObject,addAlpha,hexToRgb } from "npm-utils123"

  // 测试isObject函数
  let isObj=ref(isObject({}))

  // 测试颜色透明度
  let colorAlpha = ref(addAlpha("#ff0000", 0.5))

  // 测试hexToRgb函数
  let rgbObj = ref(hexToRgb("#ff0000"))

  defineProps<{ msg: string }>();

  const count = ref(0);
</script>

<template>
  <h1>npm-utils123包测试</h1>
  <div>isObj是一个函数嘛:{{ isObj }}</div>
  <div :style="{background:colorAlpha,padding:'40px'}">给红色增加0.5的透明度:{{ colorAlpha }}</div>
  <div>将红色hex转成rgb格式:{{ rgbObj }}</div>
</template>

  <style scoped>
  .read-the-docs {
  color: #888;
  }
</style>

效果:

杠杠的,安装使用成功啦!!!

本地调试

npm link:将npm包链接到项目中使用

  1. 进入本地包目录,执行<font style="color:rgba(0, 0, 0, 0.8);">npm link</font>
  2. 进入本地项目目录:执行<font style="color:rgba(0, 0, 0, 0.8);">npm link npm-utils123</font>

又报了之前类似的错,于是使用暴力解法,先删除node_modules,清空npm缓存,重新使用npm运行

链接成功啦!!!

踩坑记录

显示连接成功,但是实际上并不能联调

新建一个isArray,引入也报错,后面才知需要配置vite

参考连接:cn.vitejs.dev/config/shar...

vite.config.ts

javascript 复制代码
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

// https://vitejs.dev/config/
export default defineConfig({
  resolve: {
    // 使用原始文件路径,而不是node_modules
    preserveSymlinks: true,
  },
  plugins: [vue()],
});

代码:

vue 复制代码
<script setup lang="ts">
  import { ref } from "vue";
  import { isObject,addAlpha,hexToRgb,isArray } from "npm-utils123"

  // 测试isObject函数
  let isObj=ref(isObject({}))

  // 测试颜色透明度
  let colorAlpha = ref(addAlpha("#ff0000", 0.5))

  // 测试hexToRgb函数
  let rgbObj = ref(hexToRgb("#ff0000"))

  // 测试本地联调
  let isArr = ref(isArray([1, 2, 3]))


  defineProps<{ msg: string }>();

  const count = ref(0);
</script>

<template>
  <h1>npm-utils123包测试</h1>
  <div>isObj是一个函数嘛:{{ isObj }}</div>
  <div :style="{background:colorAlpha,padding:'40px'}">给红色增加0.5的透明度:{{ colorAlpha }}</div>
  <div>将红色hex转成rgb格式:{{ rgbObj }}</div>
  <div>isArr是一个数组嘛:{{isArr}}</div>
</template>

  <style scoped>
  .read-the-docs {
  color: #888;
  }
</style>

结果:isArr显示出来了,控制台也不报错

  1. 查看已链接的包:<font style="color:rgb(51, 51, 51);background-color:rgb(248, 248, 248);">npm ls -g --depth=0</font>(--depth=0:只显示顶级包,不显示其依赖关系)
  2. 链接断开,在项目目录执行:<font style="color:rgba(0, 0, 0, 0.8);">npm unlink npm-utils123</font>

注意:需要重启服务,然后就会出现以下报错:

疑问:不知道为啥使用npm ls -g还是显示链接到本地

参考链接:juejin.cn/post/725291...

常见命令

powershell 复制代码
# 撤销上传
npm unpublish --force

# 上传
npm publish

# 查看npm配置
npm profile get --json

npm地址

www.npmjs.com/package/npm...

相关推荐
光影少年4 小时前
Typescript工具类型
前端·typescript·掘金·金石计划
光影少年6 天前
Promise状态和方法都有哪些,以及实现原理
javascript·promise·掘金·金石计划
光影少年6 天前
next.js和nuxt与普通csr区别
nuxt.js·掘金·金石计划·next.js
光影少年6 天前
js异步解决方案以及实现原理
前端·javascript·掘金·金石计划
光影少年10 天前
前端上传切片优化以及实现
前端·javascript·掘金·金石计划
ZTStory13 天前
JS 处理生僻字字符 sm4 加密后 Java 解密字符乱码问题
javascript·掘金·金石计划
光影少年13 天前
webpack打包优化都有哪些
前端·webpack·掘金·金石计划
冯志浩14 天前
Harmony Next - 手势的使用(二)
harmonyos·掘金·金石计划
冯志浩15 天前
Harmony Next - 手势的使用(一)
harmonyos·掘金·金石计划
光影少年16 天前
react虚拟列表实现及原理
前端·react.js·掘金·金石计划