// 切换到工作空间,创建文件夹 rollup-ts-templatemkdir rollup-ts-template// 温馨提示:右键-新建文件夹更方便....
// 跳转到工程文件夹 rollup-ts-templatecd rollup-ts-template// 执行 npm init 会自动生成 package.json 文件,一路回车即可npm init
接下来我们需要设计一下目录结构,目前工程下仅有一个 package.json 文件,通常情况,我们需要 src 目录放置源代码,test 目录放置测试文件。除此之外,根目录下添加以下文件:
README.md 文件可用来描述工具库的用途,使用方式等。
rollup.config.json 文件维护 rollup 配置。
-
tsconfig.json 文件维护 ts 配置(PS:建议在终端执行 tsc --init 生成,包含大多数配置项且有对应的英文注释)
2.依赖项配置
-
rollup
-
@rollup/plugin-node-resolve:解析第三方库依赖(即 node_module 内的依赖)
@rollup/plugin-commonjs:识别 commonjs 格式依赖
rollup-plugin-terser:(可选)代码压缩
npm i --save-dev @rollup/plugin-node-resolve @rollup/plugin-commonjs rollup rollup-plugin-terser
2.2 TypeScript 相关
-
typescript
-
rollup-plugin-typescript2:编译 TypeScript
npm i --save-dev typescript rollup-plugin-typescript
-
@rollup/plugin-babel:rollup babel 插件
-
@babel/preset-env:babel 预设
-
@babel/plugin-transform-runtime:转义代码
npm i --save-dev @rollup/plugin-babel @babel/preset-env @babel/plugin-transform-runtime
3.编译配置
import path from 'path'import resolve from '@rollup/plugin-node-resolve'import commonjs from '@rollup/plugin-commonjs'import rollupTypescript from 'rollup-plugin-typescript2'import babel from '@rollup/plugin-babel'import { DEFAULT_EXTENSIONS } from '@babel/core'import { terser } from 'rollup-plugin-terser'// 读取 package.json 配置import pkg from './package.json'// 当前运行环境,可通过 cross-env 命令行设置const env = process.env.NODE_ENV// umd 模式的编译结果文件输出的全局变量名称const name = 'RollupTsTemplate'const config = {// 入口文件,src/index.tsinput: path.resolve(__dirname, 'src/index.ts'),// 输出文件output: [// commonjs{// package.json 配置的 main 属性file: pkg.main,format: 'cjs',},// es module{// package.json 配置的 module 属性file: pkg.module,format: 'es',},// umd{// umd 导出文件的全局变量name,// package.json 配置的 umd 属性file: pkg.umd,format: 'umd'}],plugins: [// 解析第三方依赖resolve(),// 识别 commonjs 模式第三方依赖commonjs(),// rollup 编译 typescriptrollupTypescript(),// babel 配置babel({// 编译库使用 runtimebabelHelpers: 'runtime',// 只转换源代码,不转换外部依赖exclude: 'node_modules/**',// babel 默认不支持 ts 需要手动添加extensions: [...DEFAULT_EXTENSIONS,'.ts',],}),]}// 若打包正式环境,压缩代码if (env === 'production') {config.plugins.push(terser({compress: {pure_getters: true,unsafe: true,unsafe_comps: true,warnings: false}}))}export default config
// tsconfig.json{"compilerOptions": {/* 基础选项 */"target": "esnext", /* 指定 ECMAScript 目标版本:'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */"module": "esnext", /* 输出的代码使用什么方式进行模块化:'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */"lib": [ /* 指定引用的标准库 */"esnext","dom","dom.iterable",],"allowJs": true, /* 允许编译 js 文件 */"removeComments": true, /* 输出不包含注释 *//* 严格类型检查选项 */"strict": true, /* 启用所有严格类型检查选项 */"noImplicitAny": true, /* 检查隐含 any 类型的表达式和声明 */"strictNullChecks": false, /* 严格空检查. *//* 额外检查 */"noUnusedLocals": true, /* 检查无用的变量. *//* Module Resolution Options */"moduleResolution": "node", /* 指定模块查找策略:'node' (Node.js) or 'classic' (TypeScript pre-1.6) */"baseUrl": "./", /* 查找模块的基础目录 */"paths": {"@/*": ["src/*"]}, /* 记录 baseUrl 的模块路径查找别名 */"types": [], /* 类型声明文件 */},"include": [ /* 指定编译处理的文件列表 */"src/*.ts","src/types.ts"],}// tsconfig.types.json{// 继承 tsconfig.json 中的通用配置"extends": "./tsconfig.json","compilerOptions": {"declaration": true, /* 生成相应的 '.d.ts' file. */"declarationDir": "./dist/types", /* 类型声明文件输出目录 */"emitDeclarationOnly": true, /* 只生成声明文件,不生成 js 文件*/"rootDir": "./src", /* 指定输出文件目录(用于输出),用于控制输出目录结构 */}}
module.exports = {"presets": [["@babel/preset-env",{/* Babel 会在 Rollup 有机会做处理之前,将我们的模块转成 CommonJS,导致 Rollup 的一些处理失败 */"modules": false}]],"plugins": [[// 与 babelHelpers: 'runtime' 配合使用"@babel/plugin-transform-runtime"]]}
"main": "./dist/index.js" : rollup.config.js 使用,commonjs 模式打包文件。
-
"module": "./dist/index.esm.js": rollup.config.js 使用,es module 模式打包文件。
-
"umd": "./dist/index.umd.js": rollup.config.js 使用,umd 模式打包文件。
-
"types": "./dist/types/index.d.ts": 类型声明文件入口。
-
新增以下 npm script:
-
"clean:dist": "rimraf dist" :清空 dist 目录。
-
"build:types": "npm run clean:dist && tsc -b ./tsconfig.types.json" : 编译 TypeScript 类型声明文件。
-
"build": "npm run build:types && rollup -c":打包,包括 TypeScript 类型声明文件和库文件。
-
"test": "node test/test.js": 执行测试文件。
-
"pretest": "npm run build":test 前置命令,执行 npm run test 前会限制性该命令。
{"name": "rollup-ts-template","version": "1.0.0","description": "","main": "./dist/index.js","module": "./dist/index.esm.js","umd": "./dist/index.umd.js","types": "./dist/types/index.d.ts","scripts": {"clean:dist": "rimraf dist","build:types": "npm run clean:dist && tsc -b ./tsconfig.types.json","build": "npm run build:types && rollup -c","test": "node test/test.js","pretest": "npm run build"},"author": "","license": "ISC","devDependencies": {"@babel/plugin-transform-runtime": "^7.17.0","@babel/preset-env": "^7.16.11","@rollup/plugin-babel": "^5.3.1","@rollup/plugin-commonjs": "^21.0.3","@rollup/plugin-node-resolve": "^13.1.3","rimraf": "^3.0.2","rollup": "^2.70.1","rollup-plugin-terser": "^7.0.2","rollup-plugin-typescript2": "^0.31.2","typescript": "^4.6.3"},"files": ["dist"]}
export function sayHelloWorld () {console.log('hello world')}
c
onst { sayHelloWorld } = require('../dist/index.js')sayHelloWorld()
