我正在尝试使用集中式包管理器 ( pnpm
) 而不是 vanilla npm
,因为我喜欢在硬盘驱动器上留出空间。我只是想让项目启动并遇到困难,并且几乎没有在线指导我通过这个包管理器启动项目。有没有人有经验让它为 React/React Native 工作?
任何想法都会非常受欢迎。
我尝试了两种不同的设置方式:
用 . 创建了一个新项目
pnpx create-react-app my-app
。这正是我npx create-react-app
要做的,其中包括安装超过 200MB 的模块,我已经在我的系统上安装了一百万次。我检查了node_modules
文件夹,没有一个文件是硬链接,它们是模块本身。创建了一个没有辅助命令的新项目(即 touch App.js、index.js、index.html 等)然后
pnpm i react...
等等。这以某种方式工作,所有节点包都是指向我的全局存储的链接(在 ~/ 中),但是当我尝试pnpm start
让我的服务器运行时,我得到了错误:Cannot find module ... /my-project/server.js
. 我没有 server.js 文件,但话又说回来,使用常规的 npm 和 npx 命令,我从来不需要一个。
我曾经pnpm i server
看看我是否可以让它这样工作。没有什么。我对 React 比较陌生,所以我确信我做了一些荒谬的事情,但是无论我多么初级,我都遵循了官方的说明(https://pnpm.js.org/docs/en/motivation。 html ) 并且他们没有为我工作。
pnpm 调试文件显示以下内容:
{
"0 debug pnpm:scope": {
"selected": 1,
"workspacePrefix": null
},
"1 error pnpm": {
"message": {
"errno": 1,
"code": "ELIFECYCLE",
"pkgid": "my-cv@1.0.0",
"stage": "start",
"script": "node server.js",
"pkgname": "my-cv"
},
"err": {
"name": "Error",
"message": "my-cv@1.0.0 start: `node server.js`\nExit status 1",
"code": "ELIFECYCLE",
"stack": "Error: my-cv@1.0.0 start: `node server.js`\nExit status 1\n at EventEmitter.<anonymous> (/usr/local/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/index.js:302:16)\n at EventEmitter.emit (events.js:200:13)\n at ChildProcess.<anonymous> (/usr/local/lib/node_modules/pnpm/lib/node_modules/@zkochan/npm-lifecycle/lib/spawn.js:55:14)\n at ChildProcess.emit (events.js:200:13)\n at maybeClose (internal/child_process.js:1021:16)\n at Process.ChildProcess._handle.onexit (internal/child_process.js:283:5)"
}
}
}
更新:所以我设法让它工作,我想......我掌握了所有使用的必需包,npx create-react-app
并在执行之前将它们放在 package.json 中pnpm i
。但是,除了想知道这是否可能不费这么多麻烦之外,查看文件结构,除了我在 node_modules 文件夹中的别名之外,我似乎还有一个隐藏文件夹.registry.npmjs.org
。这与我在系统根目录中的那个完全相同,我认为它是中央存储。
TLDR:看起来尽管 pnpm 似乎可以工作(别名是在 node_modules 文件夹中创建的),但我的系统上仍然有重复的包。任何人都可以确认是否是这种情况?