Create multi Library project for Typescript
Development environment
- System : Window 10 + Msys2(cygwin)
- node : 14.17.3
- npm : 7.21.0
- mocha : 9.1.2
- lerna : 4.0.0
Preparation Environment
方便命令直接使用,全局安装lerna & mocha
yarn add mocha --global
yarn add lerna --global
Create Project
mkdir tslibs-lerna-boilerplate && cd tslibs-lerna-boilerplate
git init
git branch -M main
echo "# Typescript library boilerplate with Lerna" > README.md
echo node_modules > .gitignore
git add README.md .gitignore
lerna operation
创建lerna 项目及子lib
basedir
lerna create <@lanbery>/common-utils utils
cd packages/common-utils && mkdir src
cd ../../ && touch tsconfig.project.json
配置lerna useWorkspaces
-
编辑 package.json 增加workspaces ```language { …, “workspaces”: { “packages”: [ “packages/*” // 还可以增加其他目录 ],
}
}
* 编辑 lerna.json 增加useWorkspaces
```json
{
"packages": [
"packages/*"
],
"version": "independent",
// - "npmClient":true, 此项不能配置,会导致 lerna bootstrap --hoist 不可用,即使使用官网方案也不行,可能是因为 window + cygmin 缘故吧,没弄明白
"useWorkspaces": true // +
}
添加项目开发依赖
lerna add typescript @types/node
编辑项目tsconfig
touch tsconfig.project.json
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"noImplicitAny": false,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target":"ES6",
"sourceMap": true,
"lib": [
"ES6"
],
},
"exclude": [
"node_modules",
]
}
touch packages/common-utils/tsconfig.json
{
"extends": "../../tsconfig.project.json",
"compilerOptions": {
"outDir": "lib",
},
"include": [
"src"
]
}
编写pkg 源码
cd packages/common-utils
mkdir -p src/valt/isType
touch src/index.ts
touch src/valt/typeExtend.ts
touch src/valt/isType/index.ts
部分源码
// src/valt/isType/index.ts
import { type } from '../typeExtend'
/**
* null/undefined - nil
* @param {*} value
* @param {string} typeName : [string,number,boolean,function,object,symbol,date,nil]
* @returns
*
*/
export const isType = (value, typeName) => {
return type(value) === typeName
}
// src/index.ts
// valt
export {type as typeXOf } from './valt/typeExtend'
export {isType} from './valt/isType'
编辑TSC 脚本
编辑 子包 package.json
{
...,
"scripts":{
...,
"build:tsc":"tsc -c tsconfig.json", // + TSC
"test":"..."
}
}
运行 lerna run build:tsc
erna success run Ran npm script 'build:tsc' in 1 package in 3.9s:
lerna success - @lanbery/common-utils