纱线分辨率的npm当量?
是否有与此功能相当的纱线分辨率的npm当量?,npm,package.json,yarnpkg,webpack,Npm,Package.json,Yarnpkg,Webpack,是否有与此功能相当的npm?npm package.json中没有提到它 例如,我想安装lerna@3.3.2及其3.3.2中的一个依赖项(@lerna/publish)。目前使用warn这样做,但更喜欢使用npm,而不是手动更改package lock.json或任何类似的狡猾行为 "devDependencies": { "lerna": "3.3.2", }, "resolutions": { &quo
npm
?npm package.json中没有提到它
例如,我想安装lerna@3.3.2
及其3.3.2中的一个依赖项(@lerna/publish)。目前使用warn
这样做,但更喜欢使用npm,而不是手动更改package lock.json
或任何类似的狡猾行为
"devDependencies": {
"lerna": "3.3.2",
},
"resolutions": {
"@lerna/publish": "3.3.2"
}
npm本机似乎不支持此功能,但此软件包旨在添加此功能: 是由于支持,这相当于纱线的
分辨率
有关当前RFC状态的更多信息:
据我所知,
npm强制分辨率
不适用于v7。和npm力分辨率
不再更新相关字段
但是,编写一个脚本将依赖关系树限制为只包含包的一个版本相对容易,例如
#/usr/bin/env节点
/*eslint禁用独角兽/防止缩写*/
/*eslint禁用导入/明确*/
/*eslint禁用导入/无commonjs*/
/*eslint禁用节点/shebang*/
const fs=要求('fs')。承诺;
const path=require('path');
常量main=async(分辨率)=>{
const packageLockFilePath=path.resolve(uu dirname,'../package lock.json');
for(对象项的常量[名称,版本](分辨率)){
const packageLock=JSON.parse(等待fs.readFile(packageLockFilePath));
const packagepath=Object.key(packageLock.packages);
常量deletepath=[];
for(packagePath的常量packagePath){
if(packagePath.endsWith('/'+名称)){
if(packageLock.packages[packagePath].version!==版本){
deletepath.push(packagePath);
}
}
}
for(删除路径的常量packagePath){
for(删除路径的常量deletePath){
if(packagePath==deletePath | | packagePath.startsWith(deletePath+'/')){
//eslint禁用下一行fp/no delete
删除packageLock.packages[packagePath];
}
}
}
等待fs.writeFile(
packageLockFilePath,
stringify(packageLock,null,'),
);
}
};
main(需要('../package.json')。分辨率);
此脚本仅删除指向不满足package.json
中定义的解析的依赖项的所有链接
要执行脚本,只需将其添加到package.json
scripts
并定义分辨率
字段,例如
{
“脚本”:{
“postinstall”:“node bin/fix package lock.js”
},
“决议”:{
“网页包”:“5.6.0”
}
}
resolutions
只是包名和应保存在依赖关系树中的包的确切版本的映射,即上述配置将删除所有不属于5.6.0
的版本。只要您安装webpack@5.6.0
version作为您正在使用的项目的一个依赖项,这将保证所有包加载相同版本的webpack。Npm等同于您正在使用的项目。在项目被接受后,现在有一个史诗来观察实施的进展 您知道npm收缩包装的相关信息吗?这可能对你有用。请参阅:请注意,npm强制分辨率
不适用于npm v7。@Gajus:建议它现在适用于npm 7。npm力分辨率的相应版本为0.0.10
。