首页 > 其他分享 >发布npm包流程

发布npm包流程

时间:2024-07-29 15:06:08浏览次数:8  
标签:npm index true 流程 ts js 发布 tsup

npm 发布包流程

背景:假设你写了一些 js 方法想发布
参考:https://www.youtube.com/watch?v=xnfdm-s8adI、

1. 初始化环境

mkdir methodjs
cd methodjs
npm init -y
npm i -D tsup@5 typescript@4 # node <14 时的兼容版本,tsup用于编译打包ts代码

# 确保用的是npm地址
npm config set registry https://registry.npmjs.org

2. 配置

  • package.json

    {
       "name": "@sanhuamao1/methodjs", // 包名
       "version": "1.0.0",
       "description": "",
       "main": "./dist/index.js", // 当用户尝试通过 require() 引入时,Node.js 会默认使用这个文件
       "module": "./dist/index.mjs", // 当用户使用 ES 模块导入语法来引入时,Node.js 会使用这个文件
       "types": "./dist/index.d.ts", // 指定类型声明文件的位置
       "homepage": "xxx", // 自定义仓库主页地址
       "repository": {
          "url": "xxx" // 自定义仓库地址
       },
       "scripts": {
          "build": "tsup" // 使用tsup打包源码,让它分别打包成cjs和esm格式,下面有配置说明
       },
       "keywords": [], // 关键词,在npm搜索时输入什么关键词能搜到这个包
       "author": "",
       "license": "MIT",
       "devDependencies": {
          "tsup": "^5.12.9",
          "typescript": "^4.9.5"
       }
    }
    
  • tsconfig.json

    {
       "compilerOptions": {
          "strict": true,
          "noImplicitAny": true, // 禁止在没有类型注解的情况下使用 'any' 类型
          "strictNullChecks": true, // 严格检查 null 和 undefined 的类型,不允许将 null 和 undefined 赋值给非 void 类型的变量
          "target": "ES2022",
          "moduleResolution": "Node", // 使用 Node.js 的模块解析策略
          "module": "CommonJS", // 将代码生成为 CommonJS 模块,适用于 Node.js 环境
          "declaration": true, // 生成相应的 '.d.ts' 声明文件
          "isolatedModules": true, // 将每个文件作为隔离的模块,不进行项目范围内的类型检查
          "noEmit": true, // 不要生成输出文件(例如在隔离模块模式下,不生成声明文件)
          "outDir": "dist" // 指定输出文件夹,编译后的文件将放置在这里
       },
       "include": ["src"],
       "exclude": ["node_modules"]
    }
    
  • tsup.config.ts

    import tsup from 'tsup';
    // 最新版本是导入方式是: import { defineConfig } from 'tsup'
    
    export default tsup.defineConfig({
       format: ['cjs', 'esm'], // 打包为cjs 、esm 格式
       entry: ['./src/index.ts'],
       dts: true, // 生成类型声明文件
       shims: true, // 为 Node.js 核心模块生成 polyfill,在浏览器环境中,也可以使用 require 和 module.exports
       skipNodeModulesBundle: true, // 跳过对 node_modules 中的依赖进行打包
       clean: true,
    });
    
  • .npmignore:发布时不想包含以下文件

    /src
    /node_modules
    
    tsconfig.json
    tsup.config.ts
    
  • .gitignore:上库时不想包含以下文件

    /dist
    /node_modules
    

3. 创建要发布的内容

- src
    - browser
        - download.ts  // 假设这是我想发布的方法
        - index.ts
        - types.ts
    - index.ts
// src/browser/types.ts

export type DownloadMediaProps = {
   url: string;
   fileName?: string;
};
// src/browser/download.ts

import { DownloadMediaProps } from './types';

const downloadMedia = ({ url, fileName }: DownloadMediaProps) => {
   fetch(url)
      .then((response) => response.blob())
      .then((blob) => {
         const blobUrl = URL.createObjectURL(blob);
         const aElement = document.createElement('a');
         aElement.style.display = 'none';
         aElement.href = blobUrl;
         aElement.download = fileName || url.slice(url.lastIndexOf('/') + 1);
         document.body.appendChild(aElement);
         aElement.click();
         document.body.removeChild(aElement);
      });
};

export { downloadMedia };
// src/browser/index.ts

export * from './types'
export * from './download'
// src/index.ts

export * from './browser'

// 随便写一个方便测试的
export const test = () => {
    console.log('test')
}

5. 编译打包

npm run build

之后会在根目录中生成dist文件夹,里面是编译打包好的内容

6. 本地测试

  • 在包的根目录下创建链接
    cd path/to/your-package
    npm link
    
  • 在另一个项目中,使用该链接
    cd path/to/your-project
    npm link your-package-name  # 例:npm link @sanhuamao1/methodjs
    
  • 进行测试
    // path/to/your-project/index.js
    
    const { test } = require('@sanhuamao1/methodjs')
    test()
    
    node index.js
    

7. 发布包

  • 确保在npm中创建了账号
  • 登录
    npm login
    
  • 发布
    npm publish # 发布私有包
    npm publish --access=public # 发布公共包
    

标签:npm,index,true,流程,ts,js,发布,tsup
From: https://www.cnblogs.com/sanhuamao/p/18330140

相关文章

  • SpringMVC请求执行流程
    SpringMVC是一个基于Spring框架的MVC(Model-View-Controller)框架,它简化了Web应用程序的开发。在SpringMVC中,请求的执行流程是一个精心设计的过程,涉及多个核心组件的协同工作。以下是对SpringMVC请求执行流程的详细解析,内容不少于2000字。一、SpringMVC请求执行流程概述Spri......
  • 流程控制语句结构
    流程控制语句结构目录流程控制语句结构1.顺序结构定义与特点示例2.分支结构2.1.if-else语句2.2.switch语句3.循环结构1.for循环2.while循环3.do-while循环使用场景和注意事项4.跳转语句5.绘制程序流程图基本步骤常用符号示例工具1.顺序结构定义与特点定义:顺序结构是指程......
  • 计算机毕业设计实现流程,看这篇就够了(1.2w字超详细流程)
    计算机专业毕业设计实现流程 目录如何完成毕业设计选题提交毕业设计任务书完成系统分析和系统设计完成项目编码工作撰写论文项目答辩 1.完成毕业设计选题选题的类型计算机毕业相关的设计最近几年类型比较多的题目为:XX管理系统、XX网站建设、XX小程序设计与实现、XX公......
  • 谁是开源之王?Mistral Large 2重磅发布,支持80多种编程语言
     Llama3.1登顶开源大模型王座仅仅过了一天,就被拉下了神坛,这次的主角是一家法国的团队MistralAI,发布了其最新旗舰模型MistralLarge2,这是一个具有1230亿参数的大型人工智能模型。该模型旨在增强代码生成、数学和推理能力,并支持超过80种编程语言。  模型信息数规模:12......
  • OpenAI发布AI搜索引擎SearchGPT,怎么申请?
     北京时间7月26日凌晨,OpenAI正式推出了AI驱动的搜索引擎SearchGPT。与传统搜索引擎相比,在SearchGPT输入查询后,用户将得到一个AI生成的、包含实时网络信息的会话式回答。 SearchGPT的特点直接给出答案使用SearchGPT,你可以像使用其他搜索引擎一样输入查询。但它与传统搜......
  • Llama 3.1 重磅发布,登顶开源大模型王座!
     7月23日,Meta正式发布迄今为止最强大的开源模型——Llama3.1405B,同时发布了全新升级的Llama3.170B和8B模Meta在正式发布里也附上了长达92页的论文《TheLlama3HerdofModels》,揭示了Llama3模型的技术和训练细论文地址:https://ai.meta.com/research/publications/the......
  • 中国信通院权威发布《中国算力中心服务商分析报告(2024年)》
     近日,中国信息通信研究院(简称“中国信通院”)发布《中国算力中心服务商分析报告(2024年)》。报告聚焦算力中心服务商的产业现状、市场规模、技术热点和发展趋势,通过对算力中心服务商的全面调研与综合分析,从总体规模、能力建设、财务状况、绿色低碳、集约发展、国际布局六个维度出......
  • 【版本控制系统Git】Git的基本操作与工作流程
    版本控制系统GitGit的基本操作与工作流程目录引言Git概述Git的基本操作安装Git配置Git创建仓库常用命令Git的工作流程克隆仓库分支管理提交更改合并分支解决冲突最佳实践结论引言在现代软件开发中,版本控制系统(VCS)是不可或缺的工具。它能够帮助开发团队管理代码的......
  • Qt+OpenCascade开发笔记(二):windows开发环境搭建(二):Qt引入occ库,搭建基础工程模板Demo和发
    前言  OpenCASCADE是由OpenCascadeSAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计。它是一个面向对象的C++类库,提供了丰富的几何造型、数据交换和可视化等功能,成为许多CAD软件的核心组件。  本篇描述搭建Qt开发occ环境过程。 Demo  ......
  • Node.js NPM 使用介绍
    NodePackageManager(npm)是Node.js的官方包管理器,它允许开发者安装、发布和管理Node.js应用程序的依赖项。npm是随Node.js一起安装的,因此一旦你安装了Node.js,你就有了npm。下面是一个关于如何使用npm的基本介绍,包括安装包、创建项目、管理依赖以及发布包等......