由来

最近在弄新的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标签使用 需要定义

常见配置示例

  1. 添加UMD和IIFE格式:

    // build/config.js
    exports.OUTPUT_FORMATS = ['cjs', 'es', 'umd', 'iife'];
  2. 配置外部依赖:

    // build/config.js
    exports.EXTERNAL = ['lodash', 'react', 'react-dom'];
  3. 提取CSS为单独文件:

    // build/config.js
    exports.CSS_CONFIG.extract = true;
    exports.CSS_CONFIG.fileName = 'your-style.css';
  4. 启用CSS模块化:

    // build/config.js
    exports.CSS_CONFIG.modules = true;
  5. 禁用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依赖,只需执行一条命令的更多相关文章

  1. mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

    mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

  2. Linux下间隔多少秒 (即以秒为单位) 去执行某条命令或某个shell脚本的操作方法【转】

    在日常运维工作中, 经常会碰到以秒为单位去定时执行某些命令或监控脚本的需求. 说到定时任务就要用到crontab,通常来说,crontab的最小单位是分钟级别,要想实现秒级别的定时任务,就要进行特殊设 ...

  3. [教程]K8Cscan调用外部程序(Win/Linux批量上控/执行多条命令/保存结果)

    0x000 调用原理 Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件 编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言) 由于考虑到很多人不会编程或会编程又急用无法短时间转 ...

  4. linux系统执行多条命令,linux系统执行复合命令

    在操作linux系统的时候,你是否遇到过打开一个目录,然后查看一个文件里面的内容. 我们可以使用命令   cd + 目录     cat + 文件名,我们需要输入两次,点击两次 enter   有没有 ...

  5. Linux重复执行上条命令

    Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行.2.按 !! 并回车执行.3.输入 !-1 并回车执行.4.按 Ctrl+P 并回车执行.

  6. PowerShell一次执行多条命令

    PowerShell一次执行多条命令语句 使用CMD之后换到PS之后想一次执行多条命令会很不习惯,因为原来的&&语句连接符已经不能用了. 在各种搜索后没有发现网上有说明这个的.无奈只能 ...

  7. supervisor的command执行两条命令

    如下supervisor的进程的comand配置参数只能写一个命令 1.要执行多条命令,可以写个sh文件包含多条命令,然后sh -x   xxxx.sh,但这样又多了一个文件, 2.把所有命令放在字符 ...

  8. linux sheel重复执行上条命令

    Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行. 2.按 !! 并回车执行. 3.输入 !-1 并回车执行. 4.按 Ctrl+P 并回车执行.

  9. ssh 执行多条命令包含awk的用法

    格式:ssh user@ip command 单条命令:ssh user@ip command1 多条命令:ssh user@ip "command1;command2" 不加双引 ...

  10. 【转】使用shell登录远程服务器执行多条命令,ssh登录之后执行脚本文件

    原文:https://blog.csdn.net/qq_36622490/article/details/100773589 这个需求主要是我在jenkins中pipeline的代码里,需要使用she ...

随机推荐

  1. 使用ffmpeg去除音频静音

    直接使用cmd命令ffmpeg -i input.wav -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-30dB ...

  2. 后端开发之chrome开发者模式-copy

    1. 场景描述 java开发前后端分离模式越来越流行,后端人员可以直接使用swagger进行接口调试(前后端分离之Swagger2),但是调试的时候,需要设置入参,假如该模块不是软件老王开发的,接别人 ...

  3. 《Linux shell 脚本攻略》第1章——读书笔记

    目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...

  4. Nginx设置HTTPS监听

    原文链接:https://blog.liuzijian.com/post/03708e47-03bd-4efe-a569-16f0eedc6158.html 1. 获取 SSL 证书 首先,你需要获取 ...

  5. ctfshow--红包题第二弹 临时文件命令执行

    上来先代码审计 点击查看代码 <?php if(isset($_GET['cmd'])){ $cmd=$_GET['cmd']; highlight_file(__FILE__); if(pre ...

  6. 搭建个人AI知识库:RAG与本地模型实践指南

    引言 你是否想过拥有一个私人订制的AI助手,能够随时为你提供最个性化的信息?本文将带你一步步搭建一个基于本地模型和RAG技术的个人知识库. 搭建本地模型 环境 os: archlinux 内存: 32 ...

  7. # Vue3.5常用特性整理

    Vue3.5 发布已近半年,抽空整理下常用的新增/改动特性 响应式 Props 解构 Vue3.5 中 Props 正式支持解构了,并添加了响应式跟踪 设置默认值 使用 JavaScript 原生的默 ...

  8. 小程序image图片缩小不变形

    使用mode =aspectFill 值 说明 scaleToFill 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 图片会变形 aspectFit 缩放模式,保持纵横 ...

  9. 设置npm、yarn和pnpm的国内镜像地址和yarn命令相关问题

    1.npm 全局设置: 输入如下命令查看镜像地址: npm config get registry 输入如下命令设置镜像地址为淘宝: // 推荐地址 npm config set registry h ...

  10. postman获取时间戳并自动计算token

    工作中时常要测试接口,公共请求参数包括id, timestamp, token, token = MD5(id + key + timestamp)并转大写. 每次用外部工具去获取时间戳并计算toke ...