我有一个monorepo项目,其中一个包是cli。为了防止npm供应链的攻击,我正在考虑使用npm-shrinkwrap。
文档这里说:
推荐的npm-缩缩包装.case用例是通过注册表上的发布过程部署的应用程序:例如,用作全局安装或devDependencies的守护进程和命令行工具。
这正是我在部署命令行工具时想要的。唯一的问题是,npm-收缩包装似乎不支持工作空间.
假设我的monorepo的cli部分可以在路径中找到:/code/packages/cli,当我切换到它并运行npm shrinkwrap时,会得到错误:
npm ERR! code ENOWORKSPACES
npm ERR! This command does not support workspaces.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/me/.npm/_logs/2022-05-16T20_53_41_147Z-debug-0.log如果切换到项目的根,即/code/并运行npm shrinkwrap,它将生成具有以下结构的npm-shrinkwrap.json:
{
"name": "root",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "root",
"version": "1.0.0",
"license": "ISC",
"workspaces": [
"packages/*"
],
"devDependencies": {
"lerna": "^4.0.0"
}
},
"packages/cli": {
"name": "@proj/cli",
"version": "1.0.0",
"extraneous": true,
"license": "ISC"
}
}
}但唯一的问题是,这不是应该为cli创建的确切结构。此外,当我发布包(使用lerna)时,npm-shrinkwrap.json从未包含在cli包中。
关于如何使npm收缩包装与工作区一起工作有什么建议吗?
基本上,如何在单个程序包中生成包的npm-shrinkwrap.json,并在该包发布时将其嵌入其中?
发布于 2022-07-25 17:21:24
该工具npm-lockfile使用npm的内部结构,并在monorepos中工作。
不幸的是,他们使用的是旧版本的@npm/arborist,因此它不能正常工作,您现在可以使用我的补丁
https://stackoverflow.com/questions/72265540
复制相似问题