commit
fb9b81bdec
@ -0,0 +1,30 @@ |
||||
# Logs |
||||
logs |
||||
*.log |
||||
npm-debug.log* |
||||
yarn-debug.log* |
||||
yarn-error.log* |
||||
pnpm-debug.log* |
||||
lerna-debug.log* |
||||
|
||||
node_modules |
||||
.DS_Store |
||||
dist |
||||
dist-ssr |
||||
coverage |
||||
*.local |
||||
|
||||
/cypress/videos/ |
||||
/cypress/screenshots/ |
||||
|
||||
# Editor directories and files |
||||
.vscode/* |
||||
!.vscode/extensions.json |
||||
.idea |
||||
*.suo |
||||
*.ntvs* |
||||
*.njsproj |
||||
*.sln |
||||
*.sw? |
||||
|
||||
*.tsbuildinfo |
@ -0,0 +1,73 @@ |
||||
# Monorepo的使用方法 |
||||
|
||||
1. 安装pnpm |
||||
|
||||
```bash |
||||
npm i -g pnpm |
||||
``` |
||||
|
||||
2. 新建monorepo项目 |
||||
|
||||
```bash |
||||
mkdir monorepo-project |
||||
``` |
||||
|
||||
3. 初始化项目 |
||||
|
||||
```bash |
||||
# pnpm init 现在不能使用-y |
||||
cd monorepo-project |
||||
pnpm init |
||||
``` |
||||
|
||||
4. 新建workspace定义文件 |
||||
|
||||
> 参考官网给出的例子 `https://pnpm.io/zh/pnpm-workspace_yaml` |
||||
|
||||
```bash |
||||
echo "packages: |
||||
- 'packages/*'" > pnpm-workspace.yaml |
||||
``` |
||||
|
||||
5. 在packages下建项目(因为上免得文件声明的是`packages`,你也可以建立其他的目录后声明) |
||||
|
||||
```bash |
||||
cd packages |
||||
mkdir projectA |
||||
mkdir projectB |
||||
# 开始初始化各个项目 |
||||
``` |
||||
|
||||
6. 各个项目互相引用 |
||||
|
||||
*第一次不要使用`pnpm add`,在子项目的package.json中,直接写依赖* |
||||
|
||||
```json |
||||
{ |
||||
"dependencies": { |
||||
"tools": "workspace:*", |
||||
} |
||||
} |
||||
``` |
||||
|
||||
*后面可以在主项目目录使用`pnpm add 像添加的依赖包名 --filter 给那个项目添加`* |
||||
|
||||
7. 引用完了记得在主项目构建`pnpm i` |
||||
|
||||
8. 启动项目 |
||||
|
||||
```bash |
||||
# pnpm run -C packages/web dev |
||||
pnpm run -C packages/子项目路径 子项目中的启动命令 |
||||
``` |
||||
|
||||
> scripts中的文件的意思是禁用npm |
||||
> 在package.json中添加这条命令 `"preinstall": "node ./scripts/preinstall.js"` |
||||
|
||||
```js |
||||
if(!/pnpm/.test(process.env.npm_execpath || '')) { |
||||
console.log('只能使用pnpm'); |
||||
console.warn() |
||||
process.exit(1) |
||||
} |
||||
``` |
@ -0,0 +1,14 @@ |
||||
{ |
||||
"name": "monos", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"type": "module", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1", |
||||
"preinstall": "node ./scripts/preinstall.js" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC" |
||||
} |
@ -0,0 +1 @@ |
||||
export const name = 'package-a'; |
@ -0,0 +1,13 @@ |
||||
{ |
||||
"name": "packageA", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"type": "module", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC" |
||||
} |
@ -0,0 +1 @@ |
||||
export const ace = 'packageB'; |
@ -0,0 +1,16 @@ |
||||
{ |
||||
"name": "packageB", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"type": "module", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC", |
||||
"dependencies": { |
||||
"packageA": "workspace:*" |
||||
} |
||||
} |
@ -0,0 +1,3 @@ |
||||
const name = 'tools'; |
||||
|
||||
export default name |
@ -0,0 +1,13 @@ |
||||
{ |
||||
"name": "tools", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"type": "module", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC" |
||||
} |
@ -0,0 +1 @@ |
||||
export const a = 'AAA-C' |
@ -0,0 +1,8 @@ |
||||
import tools from "tools"; |
||||
import {a} from "tools/src/a.js"; |
||||
import { name } from "packageA"; |
||||
import { ace } from "ace"; |
||||
console.log(tools) |
||||
console.log(a) |
||||
console.log(name) |
||||
console.log(ace) |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"name": "web", |
||||
"version": "1.0.0", |
||||
"description": "", |
||||
"type": "module", |
||||
"main": "index.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1", |
||||
"dev": "node index.js" |
||||
}, |
||||
"keywords": [], |
||||
"author": "", |
||||
"license": "ISC", |
||||
"dependencies": { |
||||
"tools": "workspace:*", |
||||
"packageA": "workspace:*", |
||||
"ace": "workspace:packageB@1.0.0" |
||||
} |
||||
} |
@ -0,0 +1,31 @@ |
||||
lockfileVersion: '9.0' |
||||
|
||||
settings: |
||||
autoInstallPeers: true |
||||
excludeLinksFromLockfile: false |
||||
|
||||
importers: |
||||
|
||||
.: {} |
||||
|
||||
packages/packageA: {} |
||||
|
||||
packages/packageB: |
||||
dependencies: |
||||
packageA: |
||||
specifier: workspace:* |
||||
version: link:../packageA |
||||
|
||||
packages/tools: {} |
||||
|
||||
packages/web: |
||||
dependencies: |
||||
ace: |
||||
specifier: workspace:packageB@1.0.0 |
||||
version: link:../packageB |
||||
packageA: |
||||
specifier: workspace:* |
||||
version: link:../packageA |
||||
tools: |
||||
specifier: workspace:* |
||||
version: link:../tools |
@ -0,0 +1,3 @@ |
||||
packages: |
||||
# all packages in direct subdirs of packages/ |
||||
- 'packages/*' |
@ -0,0 +1,5 @@ |
||||
if(!/pnpm/.test(process.env.npm_execpath || '')) { |
||||
console.log('只能使用pnpm'); |
||||
console.warn() |
||||
process.exit(1) |
||||
} |
Loading…
Reference in new issue