From 343e067ec8ea65dbc48d7323e147803d86e2f173 Mon Sep 17 00:00:00 2001 From: Hu Song Date: Thu, 15 Sep 2022 12:51:23 +0800 Subject: [PATCH] Use pnpm workspace instead of lerna (#1032) * build: Use pnpm workspace instead of lerna --- .github/workflows/nodejs.yml | 29 ++++++++++++++++++++++++++--- .npmrc | 5 +++-- README.md | 7 +++++-- lerna.json | 12 ------------ package.json | 14 +++++--------- packages/core/package.json | 4 ++-- packages/design/package.json | 2 +- packages/draco/package.json | 2 +- packages/loader/package.json | 8 ++++---- packages/math/package.json | 0 packages/oasis-engine/package.json | 8 ++++---- packages/physics-lite/package.json | 5 +++-- packages/physics-physx/package.json | 5 +++-- packages/rhi-webgl/package.json | 6 +++--- pnpm-workspace.yaml | 5 +++++ tests/package.json | 9 +++++---- 16 files changed, 70 insertions(+), 51 deletions(-) delete mode 100644 lerna.json mode change 100755 => 100644 packages/design/package.json mode change 100755 => 100644 packages/math/package.json create mode 100644 pnpm-workspace.yaml diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index f7db80c4c..6935c66cf 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: - node-version: [15.x] + node-version: [16.x] steps: - uses: actions/checkout@v2 @@ -17,9 +17,32 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm install + + - uses: pnpm/action-setup@v2.0.1 + name: Install pnpm + id: pnpm-install + with: + version: 7 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "::set-output name=pnpm_cache_dir::$(pnpm store path)" + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + - run: npm run ci - - run: npm install codecov + - run: pnpm install codecov -w - name: Upload coverage to Codecov run: ./node_modules/.bin/codecov - run: curl -s https://codecov.io/bash \ No newline at end of file diff --git a/.npmrc b/.npmrc index 326e36628..faa6b54e6 100644 --- a/.npmrc +++ b/.npmrc @@ -1,3 +1,4 @@ -registry=https://registry.npm.taobao.org chromedriver_cdnurl=https://npmmirror.com/mirrors/chromedriver/ -electron_mirror=http://npm.taobao.org/mirrors/electron/ \ No newline at end of file +electron_mirror=http://npm.taobao.org/mirrors/electron/ +hoist=true +auto-install-peers=true \ No newline at end of file diff --git a/README.md b/README.md index 8569d82b2..3f49eb1f8 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,13 @@ Make sure to read the [Contributing Guide](.github/HOW_TO_CONTRIBUTE.md) / [่ดก ## Build -If you don't already have [Node.js v15.0.0+](https://nodejs.org/en/) and NPM, go install them. Then, in the folder where you have cloned the repository, install the build dependencies using npm: +prerequisites: +- [Node.js v15.0.0+](https://nodejs.org/en/) and NPM (Install Node.js By official website) +- [PNPM](https://pnpm.io/) (Install Pnpm globally by `npm install -g pnpm`) +First, you need to install the dependencies: ```sh -npm run bootstrap +pnpm install ``` Then, to build the source, using npm: diff --git a/lerna.json b/lerna.json deleted file mode 100644 index bfd533768..000000000 --- a/lerna.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "npmClient": "npm", - "version": "0.9.0-alpha.4", - "bootstrap": { - "hoist": true - }, - "packages": [ - "packages/*", - "tests/**" - ], - "loglevel": "verbose" -} diff --git a/package.json b/package.json index a0ea0285d..761541df6 100644 --- a/package.json +++ b/package.json @@ -2,24 +2,21 @@ "name": "oasis-engine-root", "version": "1.0.0", "private": true, - "workspaces": [ - "packages/*" - ], "scripts": { - "bootstrap": "npm i && lerna bootstrap", + "preinstall": "npx only-allow pnpm", "test": "cross-env TS_NODE_PROJECT=tsconfig.tests.json floss --path tests -r ts-node/register", "test-debug": "cross-env TS_NODE_PROJECT=tsconfig.tests.json floss --path tests -r ts-node/register --debug", "test-cov": "cross-env TS_NODE_PROJECT=tsconfig.tests.json nyc --reporter=lcov floss --path tests -r ts-node/register", - "ci": "lerna bootstrap && npm run b:module && npm run b:types && npm run test-cov", + "ci": "pnpm install && npm run b:module && npm run b:types && npm run test-cov", "lint": "eslint packages/*/src --ext .ts", "watch": "cross-env NODE_ENV=development BUILD_TYPE=MODULE rollup -cw -m inline", "watch:umd": "cross-env NODE_ENV=development BUILD_TYPE=UMD rollup -cw -m inline", - "b:types": "lerna run b:types", + "b:types": "pnpm -r --filter='./packages/*' run b:types", "b:module": "cross-env BUILD_TYPE=MODULE rollup -c", "b:umd": "cross-env BUILD_TYPE=UMD rollup -c", "b:miniprogram": "cross-env BUILD_TYPE=MINI rollup -c", "b:all": "npm run b:types && cross-env BUILD_TYPE=ALL rollup -c", - "clean": "lerna exec -- rm -rf dist && lerna clean" + "clean": "pnpm -r exec rm -rf dist && pnpm -r exec rm -rf types" }, "devDependencies": { "@babel/core": "^7.12.10", @@ -39,10 +36,10 @@ "@rollup/plugin-replace": "^2.3.4", "@types/chai": "^4.3.1", "@types/mocha": "^8.0.0", + "@types/node": "^18.7.16", "@types/offscreencanvas": "^2019.6.4", "@typescript-eslint/eslint-plugin": "^4.12.0", "@typescript-eslint/parser": "^4.12.0", - "babel-loader": "^8.2.2", "chai": "^4.3.6", "cross-env": "^5.2.0", "electron": "^13", @@ -51,7 +48,6 @@ "eslint-plugin-prettier": "^3.1.1", "floss": "^5.0.1", "husky": "^4.3.7", - "lerna": "^3.22.1", "lint-staged": "^10.5.3", "nyc": "^15.1.0", "prettier": "^2.2.1", diff --git a/packages/core/package.json b/packages/core/package.json index c03273712..dc71770e8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -18,9 +18,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/math": "0.9.0-alpha.4" + "@oasis-engine/math": "workspace:*" }, "devDependencies": { - "@oasis-engine/design": "0.9.0-alpha.4" + "@oasis-engine/design": "workspace:*" } } diff --git a/packages/design/package.json b/packages/design/package.json old mode 100755 new mode 100644 index d078e0dcf..2051fc338 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -17,6 +17,6 @@ ], "types": "types/index.d.ts", "dependencies": { - "@oasis-engine/math": "0.9.0-alpha.4" + "@oasis-engine/math": "workspace:*" } } diff --git a/packages/draco/package.json b/packages/draco/package.json index af7edf260..6ff5568bf 100644 --- a/packages/draco/package.json +++ b/packages/draco/package.json @@ -17,6 +17,6 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.9.0-alpha.4" + "@oasis-engine/core": "workspace:*" } } diff --git a/packages/loader/package.json b/packages/loader/package.json index 83e054938..b378c4b91 100755 --- a/packages/loader/package.json +++ b/packages/loader/package.json @@ -18,9 +18,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.9.0-alpha.4", - "@oasis-engine/draco": "0.9.0-alpha.4", - "@oasis-engine/math": "0.9.0-alpha.4", - "@oasis-engine/rhi-webgl": "0.9.0-alpha.4" + "@oasis-engine/core": "workspace:*", + "@oasis-engine/draco": "workspace:*", + "@oasis-engine/math": "workspace:*", + "@oasis-engine/rhi-webgl": "workspace:*" } } diff --git a/packages/math/package.json b/packages/math/package.json old mode 100755 new mode 100644 diff --git a/packages/oasis-engine/package.json b/packages/oasis-engine/package.json index 109616277..084db1cbf 100755 --- a/packages/oasis-engine/package.json +++ b/packages/oasis-engine/package.json @@ -18,9 +18,9 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.9.0-alpha.4", - "@oasis-engine/loader": "0.9.0-alpha.4", - "@oasis-engine/math": "0.9.0-alpha.4", - "@oasis-engine/rhi-webgl": "0.9.0-alpha.4" + "@oasis-engine/core": "workspace:*", + "@oasis-engine/loader": "workspace:*", + "@oasis-engine/math": "workspace:*", + "@oasis-engine/rhi-webgl": "workspace:*" } } diff --git a/packages/physics-lite/package.json b/packages/physics-lite/package.json index ee3e21a08..be2162276 100644 --- a/packages/physics-lite/package.json +++ b/packages/physics-lite/package.json @@ -19,9 +19,10 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.9.0-alpha.4" + "@oasis-engine/design": "workspace:*", + "oasis-engine": "workspace:*" }, "peerDependencies": { - "oasis-engine": "0.9.0-alpha.4" + "oasis-engine": "workspace:*" } } diff --git a/packages/physics-physx/package.json b/packages/physics-physx/package.json index 250e42b06..939d47562 100644 --- a/packages/physics-physx/package.json +++ b/packages/physics-physx/package.json @@ -20,9 +20,10 @@ "types/**/*" ], "devDependencies": { - "@oasis-engine/design": "0.9.0-alpha.4" + "@oasis-engine/design": "workspace:*", + "oasis-engine": "workspace:*" }, "peerDependencies": { - "oasis-engine": "0.9.0-alpha.4" + "oasis-engine": "workspace:*" } } diff --git a/packages/rhi-webgl/package.json b/packages/rhi-webgl/package.json index ec7be468c..4348ad774 100755 --- a/packages/rhi-webgl/package.json +++ b/packages/rhi-webgl/package.json @@ -18,10 +18,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.9.0-alpha.4", - "@oasis-engine/math": "0.9.0-alpha.4" + "@oasis-engine/core": "workspace:*", + "@oasis-engine/math": "workspace:*" }, "devDependencies": { - "@oasis-engine/design": "0.9.0-alpha.4" + "@oasis-engine/design": "workspace:*" } } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..125e8583e --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +packages: + # all packages in direct subdirs of packages/ + - 'packages/*' + # all packages in subdirs of components/ + - 'tests' \ No newline at end of file diff --git a/tests/package.json b/tests/package.json index 5c74ececb..e5a109263 100644 --- a/tests/package.json +++ b/tests/package.json @@ -15,9 +15,10 @@ "types/**/*" ], "dependencies": { - "@oasis-engine/core": "0.9.0-alpha.4", - "@oasis-engine/design": "0.9.0-alpha.4", - "@oasis-engine/math": "0.9.0-alpha.4", - "@oasis-engine/rhi-webgl": "0.9.0-alpha.4" + "@oasis-engine/core": "workspace:*", + "@oasis-engine/design": "workspace:*", + "@oasis-engine/math": "workspace:*", + "@oasis-engine/rhi-webgl": "workspace:*", + "@oasis-engine/physics-lite": "workspace:*" } }