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