[Tools] 发布代码

news/2025/3/6 20:34:31/文章来源:https://www.cnblogs.com/Answer1215/p/18696040

我们已经将我们的代码开源到了 github 上面,但是如果是其他开发者想要使用我们的库,还需要去 github 上面手动下载下来,添加到他们的项目里面,这样是非常低效的一种方式。

npm 的出现解决了这个问题,npm 是前端领域非常出名的一个包的托管平台,提供了代码的托管和检索以及下载安装功能。

注意同样都是托管代码,github 和 npm 的分工是非常明确的

  • github 托管的是项目、库的源码,供其他开发者可以查阅我们的源代码
  • npm 托管的是项目或者库打包之后的代码,向 npm 上传代码的时候,我们上传了什么文件,回头其他开发者通过 npm i 安装的时候就会得到对应的文件,npm 在进行代码托管的时候,一般不会上传源码,而是上传打包后的代码

因此这里我们将我们的代码发布到 npm 上面的时候,会分为如下的两个步骤:

  • 打包代码
  • 发布前准备
  • 进行发布

打包代码

这里我们选择使用轻量级的 rollup 来进行代码的打包。首先安装如下的依赖

npm install --save-dev rollup rollup-plugin-typescript2 rollup-plugin-node-resolve rollup-plugin-commonjs rollup-plugin-terser

注意这些依赖都是开发依赖。

安装完毕之后,在项目根目录下面创建一个 rollup 的配置文件 rollup.config.js,配置如下:

import typescript from "rollup-plugin-typescript2";
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import { terser } from "rollup-plugin-terser";// 配置选项数组
const outputConfigs = [{// 打包为 commonjs 模块file: "dist/index.common.js", // 类似于 webpack 的 outputformat: "cjs", // 打包为 commonjs 模块exports: "default"
},{// 打包为 ESM 模块file: "dist/index.esm.js", // 类似于 webpack 的 outputformat: "es", // 打包为 ESM 模块exports: "named"
},{// 打包为 umd 模块,方便在浏览器里面使用file: "dist/index.js",format: "umd",name: "jstp",exports: "default",
}];export default outputConfigs.map(config=>({input: "src/index.ts", // 入口文件,类似于 webpack 的 inputoutput : {...config},plugins: [typescript(),resolve(),commonjs(),terser(),],
}));

需要在 src 下面指定一个入口文件,所以我们创建了一个 index.ts,代码如下:

import { range } from "./array";
import { debounce } from "./function";
import { truncate } from "./string";export default {range,debounce,truncate,
}

另外在 tsconfig.json 中也要做一定配置修改:

  • "target": "ESNext",
  • "module": "ESNext",

发布前的准备

首先就是需要对 package.json 进行一个配置,发布代码的时候,不是说所有的代码都需要发布,往 npm 发布代表的时候,应该只发布打包后的代码,这里有两种方式:

  • 黑名单
  • 白名单

黑名单方式类似于 .gitignore 的方式,创建一个 .npmignore,回头记录在这个文件里面的目录或者文件就不会被发布到 npm 上面

# .npmignore
src
tests

但是使用黑名单的方式有一个问题就是在项目中当我们新增了一些文件或者目录的时候,.npmignore 也需要做出相应的修改。有些时候会忘记修改 .npmignore 文件,导致一些不必要的文件或者目录被发布到 npm 上面去。

更加推荐的是白名单方式,在 package.json 文件中添加 files 字段,只有 files 字段里面的文件或者目录才会被发布到 npm 上面去。

"files": ["/dist","LICENSE"
],

白名单配置完成后,我们还需要做两件事情:

  • 包的说明信息
    • 包的名字
    • 包的版本
    • 包的描述
    • 包的作者
  • 包的入口文件

示例如下:

{"name": "jstoolpack","version": "1.0.0","description": "This is a JavaScript function library, primarily aimed at learning and communication.","main": "dist/index.common.js","module": "dist/index.esm.js","browser": "dist/index.js",
}

进行发布

在发布之前,你需要确保镜像是指向 npm 的。

  • npm config get registry:查看当前的镜像源,需要保证为 https://registry.npmjs.org/
  • npm config set registry=xxxx : 设置镜像源
npm config set registry=https://registry.npm.taobao.org :这是镜像源为淘宝
npm config set registry=https://registry.npmjs.org :设置镜像源为 npm 官网的镜像

接下来需要你在 npm 上面有一个账号,注意在注册账号的时候,把邮箱一起认证,因为后邮箱需要接收验证码。

账号注册完成后,可以通过 npm login 进行一个登录,具体操作如下图所示:

image-20230607155220476

最后一步就是通过 npm publish 进行发布即可。注意发布之前也要确保工作区是干净的。具体操作如下图所示:

image-20230607155419846

至此我们的 jstoolpack 这个工具库就成功的在 npm 上面发布了。

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

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

相关文章

威海市,杨文召——老赖!!!

威海市,杨文召——老赖!!!

思科静态路由(包含小实验)

思科静态路由 路由:从源主机到目标主机的转发过程 路由器是根据路由表转发数据 路由表:路由器中维护的路由条目的集合 路由器根据路由表做路径选择 路由表的形成 直连网段 本地接口配置IP地址和子网掩码,端口开启状态,形成直连路由 非直连路由 不是本地接口配置IP地址和子网…

PKUWC2025 D2T1

其实是场上的想到的做法,但是当时被卡 corner case 了 QaQ。 注意到,我们其实可以 \(O(1)\) 次 query 求出 \(x\) 和 \(y\) 的距离。具体地,我们再找三个点,现在有 \(5\) 个点,\(10\) 个距离,而我们又可以 query \(10\) 次,正好可以解出两两距离。这里如果 \(n\le 4\) 特…

MATLAB程序测试

% Interference cancellation % 悦博特北京科技有限公司 lxdawn@163.com %clear all, close all, clctime = 0:0.1:10;r = sin(time*4*pi);% Random initialisation of the W weight and b biasR = length(time); % number of inputsS = R;% p parasite signalp = randn(size(r…

CF998

A link总共就三组,看一下每一组如果满足要让它是多少,看看最多有几个相同的,最多有几个相同的就满足这些,就可以满足这么多组。点击查看代码 #include<bits/stdc++.h>using namespace std;int a[10]; int c[5];void qwq(){cin >> a[1] >> a[2] >> …

计算机网络学习-HCIP-02

TCP、UDP TCP:可靠性高 适合对文件传输的完整性要求高,但是对延迟不敏感 电子邮件 游戏或者应用:更新客户端的时候,就是用TCP协议来更新 游戏更新完了,进去游戏开局了,这时候就用UDP协议 UDP:速度快 双十一、618,电商服务器如何顶住压力的? 使用多台服务器 cdn技术,不…

mybatis的demo程序

事实上,关于mybatis框架的所有过程,均可见于 https://mybatis.net.cn/getting-started.html 一 创建数据库 该部分就是简单的sql语句创建数据库和数据表的过程,不多赘婿,结果如图所示 二 创建maven项目,导入依赖 首先创建maven项目,注意将maven的地址改为自己的maven,而…

lightroom调色笔记

1.关于色彩关系任意两种颜色的混合都会是另一种颜色的互补色 RGB模式下: 红绿混合是黄,黄是蓝色的互补色 蓝绿混合是青色,红色是青色互补色 红蓝混合是品色,品色是绿色的互补色 2.亮度的区域划分3.关于曲线上的锚点 使用ctrl在画面上可以在曲线上找到需要调整的位置 画面偏…

05. 用户组管理

一、什么是用户组管理每一个用户都有一个用户组,系统可以对一个用户组的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同。Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同步创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修…

华为mate70pro+ 对比 小米10ultra 高像素模式

华为 拍摄一张大概要5-7秒 小米 只需不到1秒 华为明显要强华为小米 华为小米

Qt Quick与ROS通过UDP协议实现网络通信

实现目标 项目需要编写一个无人机地面站,无人机在ROS系统下运行,地面站需要与无人机建立通信,能够控制无人机起飞、降落、飞行,并能够接收无人机的状态信息。 该无人机系统的组成如下图所示:地面站通过无线网络与无人机上位机建立通信,上位机负责将飞控的无人机状态数据转…

5.C++提高编程

C++提高编程。C++提高编程 本阶段主要针对C++泛型编程和STL技术做详细讲解,探讨C++更深层的使用 1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 例如生活中的模板 一寸照片模板:PPT模板:模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是…