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

开发一个vue自定义指令的npm库-系列三:使用rollup打包npm库并发布

配置 rollup

使用rollup将 TypeScript 代码转换为 JavaScript,然后进行压缩和输出到目标文件。
项目根目录新建rollup.config.js

import typescript from "@rollup/plugin-typescript";
import terser from "@rollup/plugin-terser";
import del from "rollup-plugin-delete";export default {input: "./src/index.ts",output: [{file: "./dist/index.min.js",format: "umd",name: "svgZoomDragVueDirectives",exports: "named",},{file: "./dist/index.esm.js",format: "esm",},],plugins: [typescript(), del({ targets: "dist/*" }), terser()],
};

配置了三个 Rollup 插件:typescript 用于将 TypeScript 代码转换为 JavaScript 代码,del 用于在输出之前删除旧的输出文件,terser 用于压缩 JavaScript 代码。
设置了 Rollup 的输入文件为 ./src/index.ts。
配置了两个输出文件:
./dist/index.min.js,使用 UMD 格式输出,指定了库的名称svgZoomDragVueDirectives,并且将导出命名(exports: “named”),umd格式可以直接运行在浏览器端。
./dist/index.esm.js,使用 ES 模块格式输出,浏览器不能直接运行,实际开发中使用一般是这种格式的npm包文件,webpack、vite等打包工具中导入使用。
总的来说,这段代码的作用是将 TypeScript 代码编译、压缩并输出到指定的文件,以便在浏览器或其他运行环境中使用。

配置tsconfig.json

新建tsconfig.json

{"compilerOptions": {"target": "esnext","module": "esnext","moduleResolution": "node","lib": ["esnext", "dom"],"esModuleInterop": true,"noImplicitAny": true,"strict": true,"forceConsistentCasingInFileNames": true,"noUnusedLocals": true,"noUnusedParameters": true,"allowJs": false,"declaration": true,"outDir": "dist","isolatedModules": true},"include": ["src"],"exclude": ["node_modules", "dist"]
}

“target”:指定 TypeScript 编译器的目标 ECMAScript 版本。这里指定为 “esnext”,表示最新的 ECMAScript 标准。
“module”:指定编译后的模块格式。这里也指定为 “esnext”。
“moduleResolution”:指定模块解析策略。这里指定为 “node”,表示使用 Node.js 的模块解析算法。
“lib”:指定编译时需要引用的 TypeScript 类型定义文件。这里指定了 “esnext” 和 “dom”,表示需要使用最新的 ECMAScript 和 DOM 类型定义。
“esModuleInterop”:启用此选项可以让 TypeScript 支持 CommonJS 和 ES6 模块之间的互操作。
“noImplicitAny”:启用此选项可以禁止使用隐式 any 类型。
“strict”:启用此选项可以开启所有严格类型检查选项,包括 noImplicitAny、strictNullChecks、strictFunctionTypes、strictBindCallApply、strictPropertyInitialization 和 noImplicitThis。
“forceConsistentCasingInFileNames”:启用此选项可以确保文件名在不同操作系统上的大小写一致。
“noUnusedLocals”:启用此选项可以禁止未使用的局部变量。
“noUnusedParameters”:启用此选项可以禁止未使用的函数参数。
“allowJs”:启用此选项可以允许编译 JavaScript 文件。
“declaration”:启用此选项可以生成对应的声明文件(.d.ts)。
“outDir”:指定输出目录,即编译后的文件应该输出到哪个目录。
“isolatedModules”:启用此选项可以让 TypeScript 编译器将每个文件作为独立的模块来处理,避免命名冲突和循环依赖。
“include”:指定需要编译的文件列表。这里指定为 “src”,表示只编译 src 目录下的文件。
“exclude”:指定不需要编译的文件列表。这里指定为 “node_modules” 和 “dist”,表示不编译这两个目录下的文件。

打包

npx rollup -c

会生成ts声明文件,两个输出文件:
./dist/index.min.js,使用 UMD 格式输出,
./dist/index.esm.js,使用 ES 模块格式输出

发布npm包

package.json

{"name": "svg-zoom-drag-vue-directives","author": "zqy233","version": "1.0.8","typings": "./dist/index.d.ts","main": "./dist/index.min.js","module": "./dist/index.esm.js","type": "module","exports": {".": {"types": "./dist/index.d.ts","import": "./dist/index.min.js","require": "./dist/index.esm.js"}},"files": ["dist"],"keywords": ["vue","vue directives","svg drag","svg zoom"],"license": "MIT","repository": {"type": "git","url": "https://github.com/zqy233/svg-zoom-drag-vue-directives.git"},"bugs": {"url": "https://github.com/zqy233/svg-zoom-drag-vue-directives/issues"},"homepage": "https://github.com/zqy233/svg-zoom-drag-vue-directives","devDependencies": {"@rollup/plugin-terser": "^0.4.1","@rollup/plugin-typescript": "^11.1.0","rollup": "^3.21.5","rollup-plugin-delete": "^2.0.0","tslib": "^2.5.0"},"dependencies": {"vue-demi": "^0.14.0"}
}

“files” :指定了应该包含在该包中的文件和目录。这意味着,当其他人安装该包时,将只获得编译后的dist目录文件,而不是源代码。
“typings”:指定 TypeScript 类型定义文件的位置,这里指定为 “./dist/index.d.ts”,表示类型定义文件在 dist 目录下。
“main”:指定包的入口文件位置,这里指定为 “./dist/index.min.js”,表示入口文件在 dist 目录下,且已经被压缩。
“module”:指定包的 ES 模块入口文件位置,这里指定为 “./dist/index.esm.js”。
“type”:指定模块类型,这里指定为 “module”,表示该包是一个 ES 模块。
“exports”:定义包的导出方式,功能类似main、module、type,是一种较新的规范,这里使用了一个子属性的对象来定义导出。具体解释如下:
“.”:表示导出的根目录,即默认导出的位置。
“types”:定义类型定义文件的导出路径。
“import”:定义 ES 模块的导出路径。
“require”:定义 CommonJS 模块的导出路径。
该配置意味着,在使用该包的时候,可以直接导入包的根目录(默认导出),也可以使用 import 语句导入 ES 模块,或者使用 require 导入 CommonJS 模块。同时,该包还提供了 TypeScript 类型定义文件。

发布至npm市场

根目录输入命令
npm login
输入账户密码
npm publish

http://www.lryc.cn/news/66385.html

相关文章:

  • C嘎嘎的运算符重载基础教程以及遵守规则【文末赠书三本】
  • 【MCAL_UART】-1.2-图文详解RS232,RS485和MODBUS的关系
  • 设计模式详解(二)——单例模式
  • 为什么hooks不能在循环、条件或嵌套函数中调用
  • 互联网赚钱项目有哪些?目前最火的互联网项目
  • 队列、栈专题
  • TensorFlow vs PyTorch:哪一个更适合您的深度学习项目?
  • 大项目环境配置
  • Elasticsearch——》正则regexp
  • 五面阿里Java岗,从小公司到阿里的面经总结
  • redis(7)
  • 互联网从业者高频单词 300个
  • 初始化vue中data中的数据
  • 神经网络的建立-TensorFlow2.x
  • python基于卷积神经网络实现自定义数据集训练与测试
  • 跟着LearnOpenGL学习3--四边形绘制
  • c#笔记-结构
  • Es分布式搜索引擎
  • open3d 裁剪点云
  • 如何对第三方相同请求进行筛选过滤
  • Go RPC
  • 真正的智能不仅仅是一个技术问题
  • 【数据结构】复杂度包装泛型
  • Ae:绘画面板
  • 常见的锁和zookeeper
  • 经验总结:(Redis NoSQL数据库快速入门)
  • form表单与模板引擎
  • 医院检验信息管理系统源码(云LIS系统源码)JQuery、EasyUI
  • React 组件
  • 硕士学位论文的几种常见节奏