当前位置: 首页 > news >正文

【npm】如何将自己的插件发布到npm上

前言

简单说下 npm 是什么:
npm 是一个 node 模块管理工具,也是全球最大的共享源。 npm 工具与 nodejs 配套发布,便利开发人员共享代码。npm 主要包括 npm 官方网站、CLI(控制台命令行工具)、和 registry(包/软件仓库)。

本文的插件功能为:DNS预解析
这里只用来演示如何发布到npm,该插件的功能具体是如何实现的请看本人另一篇文章:DNS解析优化。

一、创建本地项目

1. 初始化项目

生成项目目录并且初始化package.json

mkdir my-rollup-plugin
cd my-rollup-plugin
npm init -y

2. 安装开发依赖

本文使用了如下依赖

npm install vite --save-dev
npm install glob node-html-parser url-regex

3. 编写主要内容

src 目录下创建插件文件 index.js,将逻辑封装为 Vite 插件。

const fs = require("fs")
const path = require("path")
const { parse } = require("node-html-parser") // 可以脱离浏览器环境将html字符串解析成HTML节点
const { glob } = require("glob")
const urlRegex = require("url-regex") // 可以分析文件中所包含的url
const { strict } = require("assert")

const urlPattern = /(https?:\/\/[^/]*)/i // 获取外部链接
const urls = new Set() // url集合

// 遍历dist目录中的所有 HTML 文件
async function searchDomain() {
  const files = await glob("dist/**/*.{html,css,js}")
  for (const file of files) {
    const source = fs.readFileSync(file, "utf-8")
    const matches = source.match(urlRegex({ strict: true }))
    console.log(matches, "@@@@@@@@")
    if (matches) {
      matches.forEach((url) => {
        const match = url.match(urlPattern)
        if (match && match[1]) {
          urls.add(match[1]) // 将域名加到Set中
        }
      })
    }
  }
}

// 将遍历好的所有域名生成link预解析标签并插入到index.html中
async function insertLinks() {
  const files = await glob("dist/**/*.html")
  const links = [...urls]
    .map((url) => `<link rel="dns-prefetch" href="${url}">`)
    .join("\n")

  for (const file of files) {
    const html = fs.readFileSync(file, "utf-8")
    const root = parse(html)
    const head = root.querySelector("head")
    head.insertAdjacentHTML("afterbegin", links)
    fs.writeFileSync(file, root.toString(), "utf-8")
  }
}

async function main() {
  await searchDomain()
  await insertLinks()
}

main()

4. 配置package.json

{
  "name": "vite-plugin-tianbenchu-dns-prefetch",
  "version": "1.0.0",
  "main": "src/index.js",
  "scripts": {
    "build": "vite build"
  },
  "keywords": [
    "vite",
    "plugin",
    "dns-prefetch"
  ],
  "author": "TianBenChu",
  "license": "ISC",
  "description": "A Vite plugin to automatically add dns-prefetch links for external resources in the bundled HTML.",
  "devDependencies": {
    "vite": "^5.4.0"
  },
  "dependencies": {
    "glob": "^11.0.0",
    "node-html-parser": "^6.1.13",
    "url-regex": "^5.0.0"
  }
}

5. 添加README和LICENSE

书写 README.md 文件和 LICENSE 文件,以便用户了解插件的用途和使用方法。

二、本地测试

在插件项目目录外创建测试项目并安装依赖。

npm create vite@latest
npm install

插件项目中运行以下命令,将插件链接到本地 npm 包缓存中

npm link

测试项目中使用 npm link 链接本地插件,这里的链接名对应插件项目中package.json中的name。

npm link vite-plugin-tianbenchu-dns-prefetch

配置 vite.config.js,使用本地插件

import { defineConfig } from 'vite';
import dnsPrefetchPlugin from 'vite-plugin-dns-prefetch';

export default defineConfig({
  plugins: [
    dnsPrefetchPlugin()
  ]
});

本文正常测试结果如下:

1.未配置插件前执行npm run build,发现dist目录下index.html的head中并没有link标签。
在这里插入图片描述2.使用本地插件后执行npm run build,index.html的head中插入了link标签以保证dns预解析。
在这里插入图片描述

三、发布到npm

1. 登录npm账号

如何注册npm账号:npm官网链接

npm login

如果使用了淘宝镜像则会出现以下报错:
在这里插入图片描述
切换为官方注册表即可

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

2. 发布

npm publish

需要注意 package.json 中不能设置为私有,否则无法发布。

在这里插入图片描述

登录npm发现已经发布了该插件

在这里插入图片描述

3. 通过npm下载并测试插件

npm install vite-plugin-xxxxxx --save-dev

相关文章:

  • 问题-windows-VPN不正确关闭导致网页打不开
  • 操作系统实训复习笔记(1)
  • 【Python】 使用 pandas 进行数据归一化
  • Spring响应式编程之Reactor操作符
  • 如何在Java中实现数据库连接池?
  • 一天了解23种设计模式
  • 【教程】hexo 更换主题后,部署在 Github Page 无 CSS 样式
  • C#学习系列之ListView垂直滚动
  • Transformers和Langchain中几个组件的区别
  • 医学记录 --- 腋下异味
  • LogicFlow 学习笔记——11. 对齐线 和 键盘快捷键
  • Android应用保活实践
  • CARLA自动驾驶模拟器基础
  • 深入理解 JS/TS 中的 filter 方法及其布尔值筛选功能
  • 移动端 UI 风格,诠释精致
  • 【计算机体系结构】
  • 啥移动硬盘格式能更好兼容Windows和Mac系统 NTFS格式苹果电脑不能修改 paragon ntfs for mac激活码
  • getPhysicalNumberOfCells获取列数不是合并前实际列数
  • Linux操作系统
  • vos3000外呼系统通话会话超时中断详解
  • 外卖员投资失败负疚离家流浪,经民警劝回后泣不成声给父母下跪
  • 化学家、台湾地区“中研院”原学术副院长陈长谦逝世
  • 上海优化营商环境十大攻坚突破任务中,为何第一项是实施世行对标改革?
  • 潘功胜:降准0.5个百分点,降低政策利率0.1个百分点
  • 世界哮喘日|专家:哮喘无法根治,“临床治愈”已成治疗新目标
  • 这个部位最容易变老,却被很多姑娘忽视了