npm如何查看镜像源
1、查看当前配置的镜像源
npm get registry
2、设置镜像源为淘宝镜像
npm config set registry http://registry.npm.taobao.org/
3、查看npm所有镜像源
nrm ls
terminal中输出:
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/
4、如何给定第三方包名以及对应的版本号下载第三方包
nodejs代码:
function download(url, path) {
var fetch = require("node-fetch");
var fs = require("fs");
return fetch(url, {
method: 'GET',
headers: { 'Content-Type': 'application/octet-stream' },
}).then(res => res.buffer()).then(_ => {
fs.writeFile(path, _, "binary", function (err) {
console.log(err || path);
});
});
}
//下载指定版本号的包
function downloadSpecificVersionPackageFromNpmMirror(mirrorUrl,packageName,version,pathName){
var url = mirrorUrl + packageName +"/-/" + packageName + "-" + version + ".tgz";
download(url,pathName + packageName +'-'+version+'.tgz')
}
java代码:
在pom.xml中写入对hutool的依赖
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
</dependencies>
hutool中有HttpUtil.downloadFile()函数从浏览器下载文件。
import cn.hutool.http.HttpUtil;
public class Main {
static void download(String name,String version){
HttpUtil.downloadFile("https://registry.npmmirror.com/" + name +"/-/" + name +
"-" + version + ".tgz","D:");
}
public static void main(String[] args) {
download("css-loader","6.7.1");
}
}
5、npm-api
通过查资料发现npm-api工具,可以成功将package-lock.json中的数据在js页面进行处理。
5.1、 如何给定第三方包名下载全部版本rar压缩包文件
npm-api中有一个第三方依赖名称为:
npm-package-versions
Get an array of all available versions of a given npm package.
就是对于一个npm包返回所有版本
terminal中输入:
npm install npm-package-versions --save
对应代码为:
var pkgVersions = require('npm-package-versions')
pkgVersions('bonjour', function (err, versions) {
if (err) throw err
console.log('Bonjour package versions available:')
versions.forEach(function (version) {
console.log('- %s', version)
})
})
对代码进行改造并封装成 downloadAllVersionPackageFromNpmMirror() 函数:
//下载所有版本号的包
function downloadAllVersionPackageFromNpmMirror(mirrorUrl,packageName,pathName){
var pkgVersions = require('npm-package-versions')
pkgVersions(packageName, function (err, versions) {
if (err) throw err
console.log(packageName + ' package versions available:')
versions.forEach(function (version) {
var url = mirrorUrl + packageName +"/-/" + packageName + "-" + version + ".tgz";
console.log(url)
download(url, pathName + packageName +'-'+version+'.tgz')
})
})
}
5.2、对于找到给定第三方包名对应的全部依赖的递归函数的书写尝试
npm-api中查看依赖的第三方包的包名的对应代码为:
terminal中安装npm-api
npm install --save npm-api
var NpmApi = require('npm-api');
var npm = new NpmApi();
const repo = new Repo('micromatch');
repo.dependencies()
.then(function(dependencies) {
console.log(dependencies);
}, function(err) {
console.error(err);
});
对以上代码进行修改并封装成函数 getDpendencies() ,可以用来找到给定包名的第三方包的全部依赖以及依赖的依赖并下载到指定文件夹。
const getDpendencies =(name,callback)=>{
var NpmApi = require('npm-api');
var npm = new NpmApi();
var repo = npm.repo(name);
repo.dependencies()
.then(function(dependencies) {
// console.log(dependencies+"11111")
if(dependencies === undefined){
// console.log(dependencies)
console.log("end")
callback(null)
return null
}
else {
var str = JSON.stringify(dependencies)
var strstr = str.substring(1,str.length-1)
var arr = strstr.split(',')
var array = new Array()
var i = 0;
while(i<arr.length){
var index = arr[i].indexOf(':')
array.push(arr[i].substring(0,index));
array.push(arr[i].substring(index+1,arr[i].length))
i++;
}
callback(array)
// console.log(array);
return array
}
}, function(err) {
console.log("lala")
// console.error(err);
});
}
const output = (name)=>{
const res = getDpendencies(name,(data)=>{
// console.log('输出结果---->',data);
if(data!==null){
// console.log('yes')
console.log(data.length)
var i = 0
while(i<data.length){
var dependencyName = data[i];
var dependencyVersion = data[i+1];
// console.log(dependencyVersion[0]);
if(dependencyVersion[1] =='^')
dependencyVersion = dependencyVersion.substring(2,dependencyVersion.length-1)
else
dependencyVersion = dependencyVersion.substring(1,dependencyVersion.length-1)
downloadSpecificVersionPackageFromNpmMirror('https://registry.npmmirror.com/',dependencyName.substring(1,dependencyName.length-1),dependencyVersion,'C:/pack/')
output(dependencyName)
i+=2
}
}
else console.log('no')
}); // 第二个参数为回调方法
}
output('loader-utils')
downloadSpecificVersionPackageFromNpmMirror('https://registry.npmmirror.com/','css-loader','6.7.1','C:/pack/')
写代码心得:因为nodejs在调用函数时会发生异步问题,即函数没调用完成就提前执行下面语句导致出错,所以在
https://blog.csdn.net/JulyNight/article/details/121417208
这片博客中提到写一个callback回调函数可以解决nodejs异步问题。