从零创建npm依赖,只需执行一条命令
由来
最近在弄新的npm依赖,但是发现没有都从头创建项目实属有点儿麻烦,然后我找了之前开发的依赖,将多余代码删除了作为初始化的项目。于是~为什么不弄个模版,每次只需要初始化模版即可,所以就有了这个模版,为了方便,我还发布到了npm上,只需要简单的执行命令即可初始化npm依赖开发的项目。
特性
- 快速创建: 一行命令即可创建完整的TypeScript NPM库项目
- TypeScript: 内置TypeScript支持与类型声明生成
- 多格式输出: 支持CommonJS、ES Module、UMD和IIFE格式
- CSS/SCSS支持: 可以将样式文件打包到JS中或提取为单独文件
- 测试环境: 内置Node.js和浏览器测试环境
- 灵活配置: 模块化且易于自定义的构建配置
快速开始
无需安装,直接运行:
# 使用npx(推荐)
npx create-ts-npm my-lib
# 或使用npm init
npm init ts-npm my-lib
# 或使用yarn create
yarn create ts-npm my-lib
然后按照提示操作,输入包名称、描述和作者信息。
手动安装
如果你需要多次使用,也可以选择全局安装:
# 全局安装
npm install -g create-ts-npm
# 然后使用
create-ts-npm my-lib
生成的项目内容
生成的项目包含以下内容:
.
├── src/ # 源代码目录
│ ├── index.ts # 主入口文件
│ └── styles/ # 样式文件
├── build/ # 构建配置
├── dist/ # 打包输出目录(构建后生成)
├── types/ # 类型声明文件(构建后生成)
├── test-project/ # 测试项目
├── tsconfig.json # TypeScript配置
└── rollup.config.js # Rollup配置
生成的项目构建配置说明
本模板采用模块化的构建配置,主要配置文件已被拆分到build/目录下,使配置更清晰、易于维护。
配置文件结构
rollup.config.js: 主配置文件入口点,通常不需要修改build/config.js: 集中管理所有可配置选项的地方,修改此文件来自定义配置build/create-config.js: 创建Rollup配置对象的函数build/plugins/: 包含各种插件配置的目录
主要配置项
要自定义构建配置,只需编辑build/config.js文件中的选项:
// 要生成的输出格式,可以根据需要添加或删除
// 可选值: 'cjs', 'es', 'umd', 'iife'
exports.OUTPUT_FORMATS = ['cjs', 'es'];
// 是否生成类型声明文件
exports.GENERATE_TYPES = true;
// UMD/IIFE格式下的全局变量名
exports.GLOBAL_NAME = pkg.name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
// 外部依赖,这些依赖不会被打包
exports.EXTERNAL = [];
// 入口文件路径
exports.INPUT_FILE = './src/index.ts';
// CSS/SCSS配置
exports.CSS_CONFIG = {
// 是否启用CSS/SCSS处理
enabled: true,
// 是否将CSS提取为单独的文件,false表示注入到JS中
extract: false,
// 是否压缩CSS
minimize: true,
// CSS模块化,设为true会将类名转换为哈希值,避免样式冲突
modules: false,
// 是否使用Sass预处理器
sass: true,
// 自动添加浏览器前缀
autoPrefix: true,
// 提取的CSS文件名
fileName: 'styles.css'
};
输出格式及其适用场景
| 格式 | 文件扩展名 | 适用场景 | 全局变量 |
|---|---|---|---|
| CJS (CommonJS) | .js |
Node.js环境、webpack等打包工具 | 不适用 |
| ESM (ES Module) | .mjs |
现代浏览器、支持ES模块的打包工具、支持tree-shaking | 不适用 |
| UMD (Universal) | .umd.js |
通用格式,同时支持Node.js、AMD和浏览器 | 需要定义 |
| IIFE (自执行函数) | .min.js |
直接在浏览器中通过script标签使用 | 需要定义 |
常见配置示例
添加UMD和IIFE格式:
// build/config.js
exports.OUTPUT_FORMATS = ['cjs', 'es', 'umd', 'iife'];
配置外部依赖:
// build/config.js
exports.EXTERNAL = ['lodash', 'react', 'react-dom'];
提取CSS为单独文件:
// build/config.js
exports.CSS_CONFIG.extract = true;
exports.CSS_CONFIG.fileName = 'your-style.css';
启用CSS模块化:
// build/config.js
exports.CSS_CONFIG.modules = true;
禁用TypeScript类型声明生成:
// build/config.js
exports.GENERATE_TYPES = false;
在项目中使用CSS/SCSS
要在项目中使用CSS或SCSS文件,只需要在TypeScript文件中导入它们:
// 导入CSS文件
import './styles/style.css';
// 导入SCSS文件
import './styles/style.scss';
如果启用了CSS模块化(CSS_CONFIG.modules = true),可以这样导入和使用:
// 导入CSS模块
import styles from './styles/style.css';
// 使用CSS类
element.className = styles.exampleClass;
使用生成的项目
生成项目后,你可以:
# 安装依赖
cd my-lib
npm install
# 开发模式(构建并在Node.js中测试)
npm run dev
# 在浏览器中测试
npm run test:browser
# 构建生产版本
npm run build:pro
# 发布到NPM
npm run toPublish
更多
更多说明见gitee:https://gitee.com/jl15988/npm-dependent-template
从零创建npm依赖,只需执行一条命令的更多相关文章
- mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条
mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条
- Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法【转】
在日常运维工作中, 经常会碰到以秒为单位去定时执行某些命令或监控脚本的需求. 说到定时任务就要用到crontab,通常来说,crontab的最小单位是分钟级别,要想实现秒级别的定时任务,就要进行特殊设 ...
- [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)
0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...
- linux系统执行多条命令,linux系统执行复合命令
在操作linux系统的时候,你是否遇到过打开一个目录,然后查看一个文件里面的内容. 我们可以使用命令 cd + 目录 cat + 文件名,我们需要输入两次,点击两次 enter 有没有 ...
- Linux重复执行上条命令
Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.
- PowerShell一次执行多条命令
PowerShell一次执行多条命令语句 使用CMD之后换到PS之后想一次执行多条命令会很不习惯,因为原来的&&语句连接符已经不能用了. 在各种搜索后没有发现网上有说明这个的.无奈只能 ...
- supervisor的command执行两条命令
如下supervisor的进程的comand配置参数只能写一个命令 1.要执行多条命令,可以写个sh文件包含多条命令,然后sh -x xxxx.sh,但这样又多了一个文件, 2.把所有命令放在字符 ...
- linux sheel重复执行上条命令
Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行. 2.按 !! 并回车执行. 3.输入 !-1 并回车执行. 4.按 Ctrl+P 并回车执行.
- ssh 执行多条命令包含awk的用法
格式:ssh user@ip command 单条命令:ssh user@ip command1 多条命令:ssh user@ip "command1;command2" 不加双引 ...
- 【转】使用shell登录远程服务器执行多条命令,ssh登录之后执行脚本文件
原文:https://blog.csdn.net/qq_36622490/article/details/100773589 这个需求主要是我在jenkins中pipeline的代码里,需要使用she ...
随机推荐
- ORACLE存储过程编程应用实例-门诊药房发药
最近两个整理了门诊药房发药的业务逻辑,准备通过存储过程实现数据处理.耗费两天时间验证终于完成,对存储过程的了解又深入了一些,总结如下: 1.游标的遍历使用了FOR IN语句进行循环,比FETCH与方便 ...
- 浅谈OpenStack(一)
本文分享自天翼云开发者社区<浅谈OpenStack(一)>,作者:EmmaDu OpenStack刚诞生的时候比较单纯,只有计算(NASA开源)和存储(Rackspace开源)两个功能组件 ...
- 打造有效安全闭环,天翼云MDR来了!
随着网络攻-防对抗形势愈演愈烈,传统的安全防护模式已难以应对频率暴增.昼夜不停的网络安全攻-击,提升组织安全防护能力势在必行.事实上,一些单位在网络安全建设工作中经验不足,在安全组件/设备采购方面大量 ...
- 大模型背后的向量魔法:Embedding技术初探
本文原本是2022年写的,然而一直没有完善,自从LLM火起来之后,NLP领域的技术更新很快,本文只是大概介绍了Embedding相关的基础知识,具体应用接下来会在博客更新发布. 前言 又是很长一段时间 ...
- Luogu P2292 HNOI2004 L 语言 题解 [ 紫 ] [ AC 自动机 ] [ 状压 dp ]
L 语言:很好的一道状压 dp 题. 思路 看到这题,首先可以想到一个很暴力的 dp,设 \(dp_i\) 表示考虑到第 \(i\) 位能否被理解,暴力匹配字符串转移即可. 第一个优化也很显然,暴力匹 ...
- Luogu P11361 NOIP2024 编辑字符串 题解 [ 黄 ] [ 贪心 ]
编辑字符串:这题能评蓝已经说明了洛谷的唐氏. 结论 找到两个字符串种连续的且可以移动的所有极大子区间,然后线性扫一遍,看这一位所处的子区间中有多少个 \(0\) 和 \(1\),两个都有 \(0\) ...
- 支付宝 IoT 设备入门宝典(上)设备管理篇
相信不少朋友最近都被支付宝"碰一下"广告刷屏,"不用打开APP 支付就碰一下"几个字一出简直自带BGM--其实"碰一下"就是支付宝 IoT ...
- [ZJOI2019] 语言 题解
不愧是 \(ZJOI\),<最可做的一道题>都让人一头雾水-- 首先将问题转化到链上. 可以将总共的组数转化为每个点可以到达的城市. 明显给每个点建一棵动态开点线段树,维护可以和他通商的点 ...
- 用于敏捷开发的最佳免费 UML 工具 2022
Table of Contents hide 1 最好的在线免费 UML图工具 2 免费的 UML Visual Paradigm 在线平台 3 其他福利 4 用于正式和大规模可视化建模的 Vis ...
- Flink - [03] API
使用scala编写flink api从不同的数据源(源端)读取数据,并进行无界流/有界流的数据处理,最终将处理好的数据sink到对应的目标端 一.maven配置 <?xml version=&q ...