npm publish批量上传到私服

2022-06-23 11:06:00
admin
原创
1520
摘要:npm publish批量上传到私服

npm publish批量上传到私服

1、首先安装一下

npm install node-tgz-downloader -g

2、然后保存tgz文件(package-lock.json在项目目录下面会有

download-tgz package-lock package-lock.json

会在目录下面生成arballs文件夹

3、将tarballs文件夹里面的tgz文件copy到另外一个文件里面

xcopy F:\svnworkspace\saber\tarballs\*.tgz /s d:\x2

4、将文件上传到私服

上传到私服之前修改一下权限


新建c.bat


@echo off
for /r d:\x2 %%i in (*.tgz) do if exist %%i copy "%%i" d:\x3 /y
pause


通过java生成执行命令

package com.hisense.hiedu.cbos.biz;

import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
public class Cmd {
    /**
     * 获取每一个上传的 npm 包的路径
     * @param path = 根路径,比如项目文件 node_modules
     */
    public String getFiles(String path) {
        File file = new File(path);
        int [] count = {0 , 0};     //0 = 上传成功,  1= 上传失败
        if (file.isDirectory()) {
            // 获取路径下的所有文件
            File[] files = file.listFiles();
            for (int i = 0; i < files.length; i++) {
                //如果还是文件夹 递归获取里面的文件 文件夹
                isPackage(files[i],i);
            }
        } else {
            return "路径输入错误,该路径不是node_modules集合:"+file.getPath();
        }
        return "上传完毕,成功上传"+ count[0] +"个文件";
    }



    /**
     * 上传npm包
     * @param file  = 当前npm包的路径,
     * @return = 提示信息
     */
    public String isPackage(File file,Integer i){
        InputStream error = null;
        try {
            //执行上传npm 包的语句
            StringBuffer command = new StringBuffer();
            //这里的 cmd /c F: 需要更改,你要上传的npm包在哪个盘你就改成什么
            //比如路径在 `D` 盘, 那么改成    command.append("cmd /c D:");
            //这里为自己的NPM私服路径
            command.append("npm publish -registry=http://10.18.224.74:8081/repository/npm-fe-hosted/"+"  "+file.getName());
            File errorFile= file.getParentFile();
            String message = command.toString();
            if(i<300){
                fileWrite(errorFile, message, "successLoad0.txt");
            }else if(i>=300 && i<600){
                fileWrite(errorFile, message, "successLoad1.txt");
            }else if(i>=600 && i<900){
                fileWrite(errorFile, message, "successLoad2.txt");
            }else if(i>=900 && i<1200){
                fileWrite(errorFile, message, "successLoad3.txt");
            }else{
               fileWrite(errorFile, message, "successLoad4.txt");
           }

            return file.getName()+"包上传成功";
        }catch (Exception e){
            if (error != null){
                try {
                    error.close();
                }catch (Exception ex){
                    ex.printStackTrace();
                }
            }
            return e.getMessage();
        }
    }


    /**
     *
     * 文件上传成功和失败后. 写入文件存储执行信息!
     * @param file
     * @param message
     * @param fileName
     */
    private void fileWrite(File file, String message, String fileName){
        try {
            String path = file.getParent() + File.separator + fileName;
            File parentDir = new File(path); // null
            if ( !file.exists()){
                parentDir.createNewFile(); //如果txt文件不存在,那么创建
            }
            FileWriter writer = new FileWriter(parentDir, true);
            writer.write(message + System.getProperty("line.separator"));
            writer.flush();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *示例   我的 npm 包都在 F:\\file\\demo\\node_modules 下.
     * 我就给这个路径
     *  执行后会在我当前输入的路径后. F:\\file\\demo\\ 下生成两个txt文件.
     * successLoad.txt 为npm包上传成功的文件信息
     * errorLoad.txt 为npm包上传失败的文件信息!!
     */
    public static void main(String[] args) {
        new Cmd().getFiles("D:\\x3");
    }
}

命令会保存到successLoad.txt文件里面

5、执行上传(nexus登录的时候需要邮箱,设置一下邮箱)

npm login --registry=http://111.111.111.111:8081/repository/npm-fe-hosted/

执行的时候会让输入用户名,密码和邮箱

然后再把successLoad.txt文件里面的命令复制一下运行一下就可以了

    发表评论
    评论通过审核之后才会显示。
    文章分类
    联系方式
    联系人: 郑州-小万
    电话: 13803993919
    Email: 1027060531@qq.com
    QQ: 1027060531
    网址: www.wanhejia.com