Skip to main content

menorepo:pnpm turbo tsup lerna

链接

  1. https://pnpm.io/workspaces
  2. https://lerna.js.org/docs/api-reference/commands#--scope-glob
  3. https://turbo.build/repo/docs/crafting-your-repository/structuring-a-repository
  4. https://tsup.egoist.dev/#troubleshooting
  5. https://github.com/egoist/tsup/issues/1146
  6. https://casperiv.dev/blog/how-to-create-an-npm-package-tsup-esm-cjs-nodejs

创建一个 menorepo

mkdir pnpm-turbo-tsup
cd pnpm-turbo-tsup
pnpm init

pnpm 🌈

# 将 packages 中的 sub mul 安装到 react-web 中
pnpm add sub mul --workspace --filter react-web
# 每个包安装 typescript
pnpm -r add typescript -D

# 给packages下的包安装tsup
pnpm -r --filter '@next-wallet/*' add tsup -D

turbo 🌈

并行任务

tsup🌈

脚本生成配置 tsup.config.ts

#!/bin/bash

# 定义子包目录
packages=("wallet-sss" "wallet-provider" "wallet-iframe")

# tsup 配置内容
tsup_config="import { defineConfig } from 'tsup';
export default defineConfig([
{
entry: ['src/index.ts'],
format: ['esm', 'cjs'],
dts: true,
splitting: true,
sourcemap: true,
clean: true,
treeshake: false,
minify: true,
external: [],
},
]);"

# 遍历每个子包目录并创建 tsup.config.ts 文件
for package in "${packages[@]}"; do
echo "$tsup_config" > "packages/$package/tsup.config.ts"
done

echo "tsup.config.ts 文件已创建在指定子包目录下。"

problem

pnpm install
pnpm dev:tsc # run tsc
pnpm dev:tsup # run tsup

pnpm dev:tsc run ok ,pnpm dev:tsup run ok

alt text alt text

pnpm dev:tsc run ok ,pnpm dev:tsup run error

alt text alt text

issues & close sell 😓

in menorepo reexport tsup run error, but tsc run ok

alt text

fix issues ⚡️

alt text

package.json

alt text

minify

alt text

lerna🌈

# alpha版本&发布
npx lerna version prerelease --preid alpha
npx lerna publish from-package --dist-tag alpha

# beta版本 & 发布
npx lerna version prerelease --preid beta
npx lerna publish from-package --dist-tag beta

# 非第一次 只发布 @next-wallet/provider, 如果第一次,所有的包都会改版本打tag
npx lerna version prerelease --preid beta --force-publish @next-wallet/provider
npx lerna publish from-package --dist-tag beta


# 强制变更版本发布
npx lerna version --force-publish


# 如果你不希望 Lerna 在每次版本发布时创建 Git 标签,可以使用 --no-git-tag-version 选项,这样你可以手动管理版本号。
npx lerna version prerelease --preid alpha --force-publish @next-wallet/provider --no-git-tag-version


# 切换某个包的版本(这里特指:beta切换alpha,并设置到上一次的alpha版本,不提交tag,不发布),turbo环境执行过程会报错,但不影响最终库的更改
npx lerna exec --scope @next-wallet/provider -- pnpm version 0.0.1-alpha.6 --no-git-tag-version

alt text

alt text

批量删除 tag

alt text

tags=(
"@next-wallet/iframe@0.0.1-alpha.0"
"@next-wallet/iframe@0.0.1-beta.1"
"@next-wallet/iframe@0.0.2-alpha.0"
"@next-wallet/iframe@0.0.3-alpha.0"
"@next-wallet/iframe@0.0.4-alpha.0"
"@next-wallet/provider@0.0.1-alpha.0"
"@next-wallet/provider@0.0.1-alpha.1"
"@next-wallet/provider@0.0.1-beta.1"
"@next-wallet/provider@0.0.1-beta.2"
"@next-wallet/provider@0.0.2-alpha.0"
"@next-wallet/provider@0.0.3-alpha.0"
"@next-wallet/provider@0.0.4-alpha.0"
"@next-wallet/sss@0.0.1-alpha.0"
"@next-wallet/sss@0.0.1-beta.1"
"@next-wallet/sss@0.0.2-alpha.0"
"@next-wallet/sss@0.0.3-alpha.0"
"@next-wallet/sss@0.0.4-alpha.0"
"@wallet/embedded-wallet-provider@0.0.1"
"@wallet/embedded-wallet-provider@0.0.2"
"@wallet/embedded-wallet-provider@0.0.3"
"@wallet/embedded-wallet-provider@0.0.4"
"@wallet/embedded-wallet-provider@1.0.0"
"@wallet/iframe@0.0.1"
"@wallet/iframe@0.0.2"
"@wallet/iframe@0.0.3"
"@wallet/iframe@0.0.4"
@wallet/iframe@1.0.0
"@wallet/sss@0.0.1"
"@wallet/sss@0.0.2"
"@wallet/sss@0.0.3"
"@wallet/sss@0.0.4"
@wallet/sss@1.0.0
)

for tag in "${tags[@]}"; do
git tag -d "$tag"
git push origin --delete "$tag"
done

手动-单个版本更改

alt text

自动-批量版本更改

alt text

alpha 切 beta 重新计

alt text

beta 切 alpha 重新计

nrm🌈 -- NPM registry manager

NPM version

nrm can help you easy and fast switch between different npm registries, now include: npm, cnpm, taobao, nj(nodejitsu).

How to configure yarn to use private registry ?

just add .yarnrc in your project’s directory and write there: registry “http://your.registry”

Or you can configure it in your HOME directory's .yarnrc

Install

$ npm install -g nrm

Example

$ nrm ls

* npm ---------- https://registry.npmjs.org/
yarn --------- https://registry.yarnpkg.com/
tencent ------ https://mirrors.cloud.tencent.com/npm/
cnpm --------- https://r.cnpmjs.org/
taobao ------- https://registry.npmmirror.com/
npmMirror ---- https://skimdb.npmjs.com/registry/

$ nrm use cnpm  //switch registry to cnpm

Registry has been set to: http://r.cnpmjs.org/

Usage

Usage: nrm [options] [command]

Commands:

ls List all the registries
current Show current registry name
use <registry> Change registry to registry
add <registry> <url> [home] Add one custom registry
login <registry> [value] Set authorize information for a registry with a base64 encoded string or username and pasword
-a --always-auth Set is always auth
-u --username <username> Your user name for this registry
-p --password <password> Your password for this registry
-e --email <email> Your email for this registry
set-hosted-repo <registry> <value> Set hosted npm repository for a custom registry to publish packages
set-scope <scopeName> <value> Associating a scope with a registry
del-scope <scopeName> Remove a scope
set <registryName> Set custom registry attribute
-a --attr <attr> Set custorm registry attribute
-v --value <value> Set custorm registry value
del <registry> Delete one custom registry
rename <registryName> <newName> Set custom registry name
home <registry> [browser] Open the homepage of registry with optional browser
publish [<tarball>|<folder>] Publish package to current registry if current registry is a custom registry. The field 'repository' of current custom registry is required running this command. If you're not using custom registry, this command will run npm publish directly
-t --tag [tag] Add tag
-a --access <public|restricted> Set access
-o --otp [otpcode] Set otpcode
-dr --dry-run Set is dry run
test [registry] Show the response time for one or all registries
help Print this help

Options:

-h --help output usage information
-V --version output the version number

Registries

TODO

  1. Add more registry: github, sonatype, sap

Notice

When you are using preset registries the publish command will proxy to the npm official registry. When you are using a custom registry you will need to run the set-hosted-repo to set a url to publish pacakges to your hosted registry.

Maintainer is wanted

If you find nrm is useful and is a experienced node.js developer, then you can help maintain nrm. If you have the interest you can reach me through email: pana.wang@outlook.com

Contributors

LICENSE

MIT