first commit

main
expressgy 3 months ago
commit fb9b81bdec
  1. 30
      .gitignore
  2. 73
      README.md
  3. 14
      package.json
  4. 1
      packages/packageA/index.js
  5. 13
      packages/packageA/package.json
  6. 1
      packages/packageB/index.js
  7. 16
      packages/packageB/package.json
  8. 3
      packages/tools/index.js
  9. 13
      packages/tools/package.json
  10. 1
      packages/tools/src/a.js
  11. 8
      packages/web/index.js
  12. 19
      packages/web/package.json
  13. 31
      pnpm-lock.yaml
  14. 3
      pnpm-workspace.yaml
  15. 5
      scripts/preinstall.js

30
.gitignore vendored

@ -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…
Cancel
Save