2

centos部署nexus3

环境:jdk1.8nexus3

上传并解压nexus3,安装jdk并配置环境变量

vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

执行生效环境变量命令 source profile

nexus3启动:

执行到该目录下/usr/local/packages/nexus-3.13.0-01/bin

路径:/usr/local/packages/nexus-3.13.0-01/
执行启动:路径/bin下
./nexus run & //有打印日志启动
./nexus start //无打印日志启动
./nexus stop 或者 kill -9 进程id //命令失效杀进程停止

Nexus部署npm私服

1.blobStores 创建存储库:npm-store

2.repositories 创建:npm-hosted仓库并复制npm源地址

3.本地配置关联npm源地址
npm config set registry 远程npm仓库地址
npm login

4.发布包到远程仓库
到含有package.json(private:false)工程目录 执行 npm publish (无法处理依赖关系,下载包不完整。)
npm支持直接 publish tgz压缩包的方式上传到私有库。
下载 node-tgz-downloader,用来下载依赖tgz文件;脚本会通过 packagelock.json锁定的依赖包版本下载相关联的依赖包)

全局安装:
npm install node-tgz-downloader -g

npm install 生成 node_modules 文件夹后到工程根目录执行命令 download-tgz package-lock package-lock.json 网络和境外服务器原因会失败且有可能下载0kb的压缩包,需要多执行几次。

发布tgz包到私有库:

shell脚本(整合tgz包到一个目录下)

find . -name '*.tgz' -exec cp -f {} ../tgz \;

该命令会把多目录下的.tgz压缩包复制到tgz目录下。

新建sh脚本

#!/bin/bash

PACKAGE_PATH=./tgz
REPOSITORY=http://xxxxx:8081/repository/npm-hosted/

# npm login --registry=$REPOSITORY

for file in $PACKAGE_PATH/*.tgz; do
 npm publish $file
done

脚本会同步的方式依次发布包,如遇到403可以考虑权限问题,最好用管理员账号发布。

node-sass安装失败处理:

在拉取node-sass包时,尽管内网已经有npm全部包,node-sass也会从git上拉xx_binding.node的一个二进制node文件,阅读源码后发现这个文件是识别当前sass版本及电脑系统和电脑32位还是64位来下载该二进制文件,getBinaryName方法返回了文件名称

    binaryName = [
      platform, '-',
      process.arch, '-',
      process.versions.modules
    ].join('');

    return [binaryName, 'binding.node'].join('_');

通过手动cmd输入可查看文件名(darwin-x64-83),

node -p "[process.platform,process.arch,process.versions.modules].join('-')"

darwin-x64-83_binding.node 就是最后完整文件名。

查看当前安装包tgz包 npm view http-server dist.tarball

然后查看package.json中node-sass版本,通过 https://registry.npmmirror.co...版本号/文件名 来下载对应文件。

nexus上新建 raw类型hosted存储库(raw-hosted)和raw类型group存储库(raw-public)并设置读取权限。参考npm源下载地址新建node-sass/v4.14.1/目录并上传该二进制文件。完整路径(http://ip:port/repository/raw...)。

查看单个包下载地址

npm view packname

使用私服源首次npm install

分别指向私服源和二进制文件源目录,二进制文件站点(sass_binary_site)只需要指向到版本前面的分割目录即可,下载时会自动根据node-sass版本去对应目录下载对应文件。

npm config set registry http://ip:port/repository/npm...

npm config set sass_binary_site http://ip:port/repository/raw...

npm install

以上如果安装报错可以排查nexus设置的仓库权限问题,安装成功运行报错时,尝试清除npm缓存 npm cache clean -f

补充npm包下载方法2(解决包下载包0kb或者失败):

包同级目录新建write.txt并修改包node-tgz-downloader代码如下:

var arr = [];
const promises = tarballs.map(({ url, directory }, i, arr) => {
    const position = `${i + 1}/${arr.length}`;
    logger(['downloading'.cyan, position], url);
        arr.push(url)
        if((tarballs.length - 1) == i){
            fs.writeFile('./xieru.txt',JSON.stringify(arr),function(err){
              // 读取失败 err的值也是为空  null转换为布尔值还是false
              if (err) {
                return console.log(err+'写入失败的');
              }
              console.log('写入成功');
            })
            
        }
    return _downloadFileWithRetry(url, join(baseDirectory, directory), position, 10);
  });

同级目录新建index.html

<div id="app"></div>

<script type="text/javascript" src="./write.txt"></script>
<script type="text/javascript">
fetch('./write.txt')
 .then(function(response) {
   return response.json();
 })
 .then(function(myJson) {
   let app = document.querySelector('#app');
myJson.map((item,i)=>{
    let el = document.createElement('a');
    el.innerText = item; 
    el.href = item;
    app.appendChild(el).appendChild(document.createElement('p'))
})
 });
</script>

运行html全选复制下载迅雷粘贴下载。

参考相关资料:
https://blog.csdn.net/lihongt...
https://blog.csdn.net/yougoul...
https://segmentfault.com/a/11...


a2774206
1.8k 声望26 粉丝

You can't forget your role at all times