1. 给 npm 包取个【唯一】的名字!

npm 包命名规范

  • 只能包含小写字母(a-z)、数字(0-9)、连字符(-) 和 下划线(_),不能包含空格、大写字母、标点符号(除连字符和下划线外)或特殊字符(如 !、@、# 等)
  • 长度不超过 214 个字符
  • 建议以字母开头
  • 连字符(-)常用于分隔单词(如 react-dom),下划线(_)使用较少,避免连续使用连字符或下划线(如 my–package 不推荐)
  • 名称应简洁易记,体现包的具体功能
  • 避免禁用的名称,如 fs、npm、package、install、publish 等

范围包

包名格式如下的为范围包,适合个人或企业发布的系列包,如 @vue/cli 等

@scope/package-name
  • scope 是npm 用户名或组织名

在发布时,默认为私有范围包(仅自己或授权用户可见,且需要付费),可指定为公共范围包(所有人可见可安装,免费)

npm publish --access public

检验包名是否唯一

npm search 包名

或在 npm官网 中搜索试试

在这里插入图片描述

2. 创建项目

推荐的项目目录结构

package-name/
├── package.json          # 包核心配置(必选)
├── README.md             # 包说明文档(必选)
├── LICENSE               # 开源许可证(推荐)
├── CHANGELOG.md          # 版本变更记录(推荐)
├── .gitignore            # Git 忽略文件
├── .npmignore            # npm 发布忽略文件(可选,默认继承.gitignore)
├── tsconfig.json         # TypeScript 配置(如使用 TS)
├── src/                  # 源代码目录(核心逻辑)
│   ├── index.js          # 入口文件(导出核心功能)
│   ├── utils/            # 工具函数/辅助模块
│   ├── core/             # 核心业务逻辑
│   ├── types/            # 类型定义(如使用 TS 或 JSDoc)
│   └── constants/        # 常量定义
├── dist/                 # 编译/打包后的输出目录
│   ├── index.js          # 编译后的入口文件
│   ├── index.cjs         # CommonJS 版本(如支持双模块)
│   └── index.mjs         # ES 模块版本(如支持双模块)
├── test/                 # 测试目录
│   ├── unit/             # 单元测试
│   ├── integration/      # 集成测试
│   └── fixtures/         # 测试用例数据
├── docs/                 # 详细文档(可选)
├── examples/             # 使用示例(可选)
└── scripts/              # 辅助脚本(如构建、发布脚本)
  • 小型包可简化结构(如省略 core/、docs/ 等目录)。
  • 前端工具包可能需要 browser/ 目录区分浏览器环境代码。
  • 命令行工具需在 package.json 中配置 bin 字段,并在 src/ 中添加 CLI 入口。

使用 vite 的库模式开发

因 vite 并没有提供现成简易的模板,建议按下文的方式创建项目

以包名 @ecclub/util 为例,创建文件夹 “util” ,内部目录结构为:

在这里插入图片描述

具体代码如下:

src/index.ts

按需改成任意业务代码,但一定要用 export 对外导出!

export function sum(a: number, b: number) {return a + b;
}

.gitignore

node_modules/
dist/

package.json

需自定义的字段有:

  • name 包的名称
  • description 包的描述
  • keywords 包的关键词数组
  • author 包的作者

相关的依赖根据需要添加,已添加的依赖可以考虑升级到最新版

{"name": "@ecclub/util","version": "1.0.0","type": "module","description": "EC编程俱乐部开发的工具库","main": "./dist/index.umd.cjs","module": "./dist/index.js","types": "./dist/index.d.ts","files": ["dist","index.d.ts"],"scripts": {"build": "tsc && vite build"},"keywords": ["util"],"author": "朝阳 <603092378@qq.com>","license": "MIT","devDependencies": {"typescript": "~5.9.2","vite": "^7.0.6","vite-plugin-dts": "^4.5.4"}
}

tsconfig.json

基本无需更改,可根据需要添加 ts 配置

{"compilerOptions": {"target": "es2022","useDefineForClassFields": true,"module": "esnext","lib": ["ES2022", "DOM", "DOM.Iterable"],"skipLibCheck": true,/* Bundler mode */"moduleResolution": "bundler","allowImportingTsExtensions": true,"isolatedModules": true,"moduleDetection": "force","noEmit": true,/* Linting */"strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true,"noUncheckedSideEffectImports": true},"include": ["src"]
}

vite.config.ts

基本无需更改,可根据需要添加 vite 配置

import { defineConfig } from "vite";
import dts from "vite-plugin-dts";export default defineConfig({build: {lib: {entry: "./src/index.ts",name: "index",fileName: "index",},},plugins: [dts({// 生成类型声明文件insertTypesEntry: true,}),],
});

使用 npm 开发

以包名 mypack-test 为例

  1. 新建文件夹 mypack-test

  2. 用vscode 打开文件夹 mypack-test

  3. 终端执行 npm init 生成 package.json 文件,按提示输入相关信息或一路回车,最后输入 y 回车即可。
    在这里插入图片描述
    蓝框内的部分为包的信息,可根据需要自行输入(或等生成package.json后再修改)

    package.json 中各字段的含义详见
    https://blog.csdn.net/weixin_41192489/article/details/150345315

  4. 新建文件index.js,内容为
    要点:定义的函数/变量一定要对外导出!

    /*函数功能——求和参数——两个数字
    */
    function sum(a, b) {return a + b;
    }module.exports = {sum: sum,
    };
  5. 新建文件README.md,内容为包相关的信息

  6. 新建文件 .npmignore,内容为发布时不需要打包的文件,如

    node_modules
    *.log
    

3. 打包项目

若使用 npm 开发则跳过此步

此处以 vite 库模式开发为例:

先安装依赖

npm i

再执行打包脚本

在这里插入图片描述
得到

在这里插入图片描述

4. 发布 npm 包

先检查 npm 的下载源是否为官方源,若不是,则需重新设置为官方源

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

注册 npm 账号

npm adduser

或者直接去官网注册 https://www.npmjs.com/

登录 npm 账号

npm login

在这里插入图片描述
按提示按下 Enter 后,会用浏览器打开 npm 官网进行登录

在这里插入图片描述
输入账号密码后,点击登录按钮

在这里插入图片描述
输入注册 npm 账号时绑定的邮箱中收到的一次性验证码后点击登录按钮

在这里插入图片描述
回到命令行,可见已完成登录

在这里插入图片描述

发布非范围包

npm publish

发布范围包

需先在 npm 官网创建组织

在这里插入图片描述
在这里插入图片描述
输入自定义的组织名(需全网唯一)后点击 Create 按钮

创建成功后,可见

在这里插入图片描述
在 package.json 中,我们定义的包名为

  "name": "@ecclub/util",

现在可以发布包啦!

npm publish --access public

验证是否发布成功

方法一:在官网(按最新发布)搜索包名
在这里插入图片描述
方法二:用命令行验证

npm view @ecclub/util

在这里插入图片描述

方法三:安装包试用

npm i @ecclub/util

页面中使用

import { sum } from "@ecclub/util";console.log(sum(1, 2)); // 得到 3

5. 修改 npm 包后重新发布

打包项目

同第 3 步

更新版本号

  • 修复bug,例如 1.0.0 → 1.0.1
npm version patch
  • 新增功能,例如 1.0.1 → 1.1.0
npm version minor   
  • 不兼容旧版本的更新,需升级主版本,如 1.1.0 → 2.0.0
npm version major

可见 package.json 中版本号发生了变化

  "version": "1.2.0",

(也可不执行命令,直接手动修改 package.json 中的版本号)

发布修改后的 npm 包

同第 4 步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93036.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93036.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93036.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Secure 第三天作业

实验需求&#xff1a;1.参考以上拓扑所示&#xff0c;完成以下需求&#xff1a;1&#xff09; 配置各设备 IP 地址2&#xff09; 配置 ZBFW&#xff0c;Inside-1 和 nside-2 属于内部 Zone&#xff0c;Outside-1 属于外部 Zonezone security insidezone security outsidezone-p…

Linux应用层-5.计算机网络(菜鸟学习笔记)

计算机网络的核心是连接与通信&#xff0c;从底层的物理信号到上层的应用服务&#xff0c;各层协议协同工作---------------------------------------------------------------------------------------一.计算机网络分类&#xff08;按范围&#xff09;1•个人区域网&#xff…

[论文阅读] 人工智能 + 软件工程 | 大型语言模型对决传统方法:多语言漏洞修复能力大比拼

大型语言模型对决传统方法&#xff1a;多语言漏洞修复能力大比拼 论文阅读&#xff1a;On the Evaluation of Large Language Models in Multilingual Vulnerability RepairarXiv:2508.03470 On the Evaluation of Large Language Models in Multilingual Vulnerability Repair…

计算机网络2-3:传输方式

目录 串行传输和并行传输 同步传输和异步传输 单工、半双工以及全双工通信 总结 串行传输和并行传输 并行传输的优点是速度为串行传输的n倍&#xff0c;但也存在一个严重的缺点即成本高 同步传输和异步传输 单工、半双工以及全双工通信 总结

文档生成PPT软件哪个好?深度测评8款word转ppt生成工具

在日常办公与教学场景中&#xff0c;如何高效地将Word文档内容转化为专业PPT&#xff0c;一直是职场人士、教育工作者及内容创作者的共同痛点。随着AI技术的普及&#xff0c;一键式转换工具应运而生&#xff0c;它们不仅能精准识别Word中的标题与段落结构&#xff0c;还能自动套…

Azimutt:一款免费开源的多功能数据库工具

Azimutt 是一款支持数据库设计、表结构探索与分析、数据查询以及数据库文档生成功能的全栈工具。 Azimutt 是一个免费开源的项目&#xff0c;源代码托管在 GitHub&#xff1a; https://github.com/azimuttapp/azimutt 功能特性 多数据库支持&#xff1a;包括主流数据库 MySQ…

智算赋能:移动云助力“世界一流数据强港”建设之路

2024年5月&#xff0c;某创新产业园区智算中心正式揭牌成立。台下响起的掌声不仅是对一个项目的祝贺&#xff0c;更是客户对未来的期许—— 推动产业结构优化升级&#xff0c;领跑数字经济转型发展。5家500强企业、8家上市企业、17家独角兽企业……该创新产业园区在成为“世界一…

达梦自定义存储过程实现获取表完整的ddl语句

--导出表的ddl CREATE OR REPLACE PROCEDURE show_create_table( db IN varchar(255), tb IN varchar(255)) ASsql1 text;ret text : ;cmt text :;sql2 text :; BEGINFOR WSX IN (select TABLEDEF(db,tb) as ddl from dual) LOOPret: ret||WSX.DDL;END LOOP;ret : ret||chr(10…

【ARM】keil提示UVISION: Error: Encountered an improper argument

1、 文档目标 解决MDK退出debug模式后&#xff0c;提示UVISION: Error: Encountered an improper argument。 2、 问题场景 在退出Debug模式的时候&#xff0c;弹出提示窗口&#xff0c;提示&#xff1a;UVISION: Error: Encountered an improper argument。&#xff08;如图…

【2025最新版】PDF24 Creator,PDF编辑,合并分割,格式转换全能工具箱,本地离线版本,完全免费!

软件介绍&#xff08;文末获取&#xff09;这款软件于1999年开发&#xff0c;至今已经有26年了&#xff0c;这26年里它都完全免费&#xff01;简洁的操作界面&#xff0c;让用户轻松上手&#xff0c;高效完成 PDF 文件的处理&#xff0c;方便又实用。这次给大家带来的是一个本地…

如何使用VLLM进行openai/gpt-oss系列推理与支持工具调用

OpenAI时隔6年再次推出开源模型gpt-oss系列&#xff0c;本次gpt-oss系列包含两个模型gpt-oss-120b与gpt-oss-20b。由于模型原生支持一种新的量化技术MXFP4&#xff0c;所以模型的部署所需的显存也显著的降低。openai/gpt-oss-20b 只需要大概16GB的显存openai/gpt-oss-120b 需要…

SVN 查看历史信息

SVN 查看历史信息 引言 Subversion&#xff08;简称SVN&#xff09;是一个开源的版本控制系统&#xff0c;广泛应用于软件开发中。查看SVN的历史信息对于了解代码变更、追踪问题来源以及理解项目发展历程具有重要意义。本文将详细介绍如何在SVN中查看历史信息。 SVN历史信息概述…

vue+flask山西非遗文化遗产图谱可视化系统

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01;编号&#xff1a;F068 项目介绍&#xff1a; 本系统主要实现了以下功能&#xff1a; 非遗项目知识图谱可视化 非遗项目可视化关键词分析 …

Jetson NX Python环境搭建:使用APT轻松安装NumPy, scikit-learn, OpenCV

引言 在NVIDIA Jetson NX等ARM架构的嵌入式AI板子上搭建Python开发环境&#xff0c;特别是安装像NumPy、OpenCV这样包含C/C底层代码的科学计算库时&#xff0c;经常会遇到编译失败、耗时过长或依赖冲突等问题。这些问题尤其在通过pip从源代码编译安装时更为突出&#xff0c;例如…

Spring Boot项目中线程池的全面教程

一、线程池基础概念与重要性1.1 为什么需要线程池在Spring Boot应用中&#xff0c;线程池是一种至关重要的并发编程工具&#xff0c;它通过​​复用线程资源​​显著提升系统性能。主要优势包括&#xff1a;​​减少开销​​&#xff1a;避免频繁创建和销毁线程带来的性能损耗​…

机器学习第八课之K-means聚类算法

目录 简介 一、K-means 的核心思想 二、K-means 聚类的工作流程 1. 确定聚类数量 K 2.初始化 K 个簇中心 3.簇分配&#xff1a;将数据点分配到最近的簇 4.更新簇中心&#xff1a;重新计算每个簇的中心 5.判断是否收敛 6.输出聚类结果 三、聚类效果评价方式 四、k-…

【P21】OpenCV Python——RGB和BGR,HSV和HSL颜色空间,及VScode中报错问题解决

P21 1 RGB和BGR2 HSV和HSL&#xff0c;YUV2.1 HSV2.1. 色调H2.1.2 饱和度S2.1.3 明度V2.2 HSL2.3 YUV3 颜色空间转换实战4 VScode中报错问题5 Windows 下 VScode 路径格式&#xff08;VScode很强大&#xff0c;路径格式写法自由多样&#xff09;RGB/BGR人眼识别的颜色 &#xf…

.NET 应用程序 Linux下守护进程脚本编写

下面的脚本是生产可用&#xff0c;可靠的sh脚本&#xff0c;用于监控 .NET 应用程序并自动重启。假如你打包发布到Linux的程序名称为MyAspDemo&#xff1b;推荐打包模式为框架依赖&#xff1a;需要在Linux上安装对应的donet版本&#xff1b;1.在Linux下新建一个文件&#xff0c…

图论理论部分

旅游完回来继续学习。 先来看一下图论的理论部分&#xff0c;然后稍微做一下DFS的题目。 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种…

WebSocket集群方案解析与实现

一、WebSocket集群核心挑战 1.1 关键问题分析 #mermaid-svg-gzRCTMr7wiVCokct {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gzRCTMr7wiVCokct .error-icon{fill:#552222;}#mermaid-svg-gzRCTMr7wiVCokct .error-t…