yrm切换仓库地址后其他配置被删掉问题
问题:使用yarn config set global-folder D:\Yarn\yarn_global和yarn config set cache-folder D:\Yarn\yarn_cache设置yarn的全局安装目录和缓存目录使用yarn config list 查看配置结果:$ yarn config listyarn config v1.22.4info yarn config{
·
问题:
- 使用
yarn config set global-folder D:\Yarn\yarn_global
和yarn config set cache-folder D:\Yarn\yarn_cache
设置yarn
的全局安装目录和缓存目录 - 使用
yarn config list
查看配置结果:
$ yarn config list
yarn config v1.22.4
info yarn config
{
'version-tag-prefix': 'v',
'version-git-tag': true,
'version-commit-hooks': true,
'version-git-sign': false,
'version-git-message': 'v%s',
'init-version': '1.0.0',
'init-license': 'MIT',
'save-prefix': '^',
'bin-links': true,
'ignore-scripts': false,
'ignore-optional': false,
registry: 'https://registry.npmjs.org/',
'strict-ssl': true,
'user-agent': 'yarn/1.22.4 npm/? node/v12.22.4 win32 x64',
'cache-folder': 'D:\\Yarn\\yarn_cache',
'global-folder': 'D:\\Yarn\\yarn_global'
}
- 使用
yrm use taobao
切换仓库源地址 - 再使用
yarn config list
查看配置结果:
$ yarn config list
yarn config v1.22.4
info yarn config
{
'version-tag-prefix': 'v',
'version-git-tag': true,
'version-commit-hooks': true,
'version-git-sign': false,
'version-git-message': 'v%s',
'init-version': '1.0.0',
'init-license': 'MIT',
'save-prefix': '^',
'bin-links': true,
'ignore-scripts': false,
'ignore-optional': false,
registry: 'https://registry.npm.taobao.org/',
'strict-ssl': true,
'user-agent': 'yarn/1.22.4 npm/? node/v12.22.4 win32 x64',
}
- 发现前面配置的
global-folder
和cache-folder
不见了
问题分析
找到yrm
的安装目录,查看yrm/cli.js
文件,发现使用yrm use xxx
切换仓库时,是直接往C:\Users\xxx\.yarnrc
文件写入配置,代码如下:
function onUse(name) {
var allRegistries = getAllRegistry();
if (allRegistries.hasOwnProperty(name)) {
var registry = allRegistries[name];
// 注意此处,直接往文件.yarnrc写入,会覆盖掉以前的内容,所以导致其他配置不见了
fs.writeFile(YARNRC, 'registry "' + registry.registry + '"', function (err) {
if (err) throw err;
// console.log('It\'s saved!');
printMsg([
'', ' YARN Registry has been set to: ' + registry.registry, ''
]);
});
// 同时更改npm的源
npm.load(function (err) {
if (err) return exit(err);
npm.commands.config(['set', 'registry', registry.registry], function (err, data) {
if (err) return exit(err);
console.log(' ');
var newR = npm.config.get('registry');
printMsg([
'', ' NPM Registry has been set to: ' + newR, ''
]);
})
});
} else {
printMsg([
'', ' Not find registry: ' + name, ''
]);
}
}
解决方案
使用下面的代码替换掉原来的代码
function onUse(name) {
var allRegistries = getAllRegistry();
if (allRegistries.hasOwnProperty(name)) {
var registry = allRegistries[name];
// 使用以下方式,避免删掉其他配置
fs.readFile(YARNRC, (err, data) => {
if (err) throw err;
let arr = data.toString().replace(/\n/g ,';').split(';');
let _index = -1;
arr.find((_item, _i) => {
if (_item.startsWith('registry')) {
_index = _i;
return true;
}
})
let _registryStr = 'registry "' + registry.registry + '"';
if (_index > -1) {
arr[_index] = _registryStr;
} else {
arr.push(_registryStr);
}
fs.writeFile(YARNRC, arr.join('\n'), function (err) {
if (err) throw err;
console.log('It\'s saved!');
console.log('registry "' + registry.registry + '"');
printMsg([
'', ' YARN Registry has been set to: ' + registry.registry, ''
]);
});
});
// fs.writeFile(YARNRC, 'registry "' + registry.registry + '"', function (err) {
// if (err) throw err;
// console.log('It\'s saved!');
// console.log('registry "' + registry.registry + '"');
// printMsg([
// '', ' YARN Registry has been set to: ' + registry.registry, ''
// ]);
// });
// 同时更改npm的源
npm.load(function (err) {
if (err) return exit(err);
npm.commands.config(['set', 'registry', registry.registry], function (err, data) {
if (err) return exit(err);
console.log(' ');
var newR = npm.config.get('registry');
printMsg([
'', ' NPM Registry has been set to: ' + newR, ''
]);
})
});
} else {
printMsg([
'', ' Not find registry: ' + name, ''
]);
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)