# 问题集--淘宝镜像源SSL过期

xxx@MacBook-Pro xfg-dev-tech-blog-master % yarn
yarn install v1.22.17
info No lockfile found.
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] 🔍  Resolving packages...
error An unexpected error occurred: "https://registry.npm.taobao.org/@vuepress%2fclient: certificate has expired".
info If you think this is a bug, please open a bug report with the information provided in "/Volumes/zs-2T/zs-study/zs-project/xfg-dev-tech-blog-master/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

yarn-error.log

Trace: 
  Error: certificate has expired
      at TLSSocket.onConnectSecure (node:_tls_wrap:1539:34)
      at TLSSocket.emit (node:events:513:28)
      at TLSSocket._finishInit (node:_tls_wrap:953:8)
      at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:734:12)
      

痕迹:
   错误:证书已过期
       在 TLSSocket.onConnectSecure (节点:_tls_wrap:1539:34)
       在 TLSSocket.emit (节点:事件:513:28)
       在 TLSSocket._finishInit (节点:_tls_wrap:953:8)
       在 TLSWrap.ssl.onhandshakedone (节点:_tls_wrap:734:12)

# 解决方式

npm config set strict-ssl false

yarn config set "strict-ssl" false -g

# config信息

xxx@MacBook-Pro xfg-dev-tech-blog-master % npm config list
; "global" config from /Users/miyufeng/.nvm/versions/node/v16.20.2/etc/npmrc

; registry = "https://registry.npmmirror.com/" ; overridden by user
strict-ssl = true 

; "user" config from /Users/miyufeng/.npmrc

chromedriver_cdnurl = "https://npm.taobao.org/mirrors/chromedriver" 
CHROMEDRIVER_CDNURL = "https://npm.taobao.org/mirrors/chromedriver" 
ELECTRON_BUILDER_BINARIES_MIRROR = "https://npm.taobao.org/mirrors/electron-builder-binaries/" 
ELECTRON_MIRROR = "https://npm.taobao.org/mirrors/electron/" 
global = true 
NVM_NODEJS_ORG_MIRROR = "https://npm.taobao.org/mirrors/node" 
OPERADRIVER = "https://npm.taobao.org/mirrors/operadriver" 
phantomjs_cdnurl = "https://npm.taobao.org/dist/phantomjs" 
PYTHON_MIRROR = "https://npm.taobao.org/mirrors/python" 
registry = "https://registry.npm.taobao.org/" 
sass_binary_site = "https://npm.taobao.org/mirrors/node-sass" 

; node bin location = /Users/miyufeng/.nvm/versions/node/v16.20.2/bin/node
; node version = v16.20.2
; npm local prefix = /Volumes/zs-2T/zs-study/zs-project/xfg-dev-tech-blog-master
; npm version = 8.19.4
; cwd = /Volumes/zs-2T/zs-study/zs-project/xfg-dev-tech-blog-master
; HOME = /Users/miyufeng
; Run `npm config ls -l` to show all defaults.
xxx@MacBook-Pro xfg-dev-tech-blog-master % yarn config list
yarn config v1.22.17
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.npmmirror.com',
  'strict-ssl': true,
  'user-agent': 'yarn/1.22.17 npm/? node/v16.20.2 darwin x64',
  'ignore-engines': true,
  lastUpdateCheck: 1706663282683
}
info npm config
{
  'strict-ssl': true,
  registry: 'https://registry.npm.taobao.org/',
  phantomjs_cdnurl: 'https://npm.taobao.org/dist/phantomjs',
  chromedriver_cdnurl: 'https://npm.taobao.org/mirrors/chromedriver',
  sass_binary_site: 'https://npm.taobao.org/mirrors/node-sass',
  ELECTRON_MIRROR: 'https://npm.taobao.org/mirrors/electron/',
  NVM_NODEJS_ORG_MIRROR: 'https://npm.taobao.org/mirrors/node',
  CHROMEDRIVER_CDNURL: 'https://npm.taobao.org/mirrors/chromedriver',
  OPERADRIVER: 'https://npm.taobao.org/mirrors/operadriver',
  ELECTRON_BUILDER_BINARIES_MIRROR: 'https://npm.taobao.org/mirrors/electron-builder-binaries/',
  PYTHON_MIRROR: 'https://npm.taobao.org/mirrors/python',
  global: '='
}
✨  Done in 0.37s.

# 关闭strict-ssl

npm config set strict-ssl false

yarn config set "strict-ssl" false
xxx@MacBook-Pro xfg-dev-tech-blog-master % yarn config list                  
yarn config v1.22.17
info yarn config
{
...
  'strict-ssl': false,
 ...
}
info npm config
{
  'strict-ssl': false,
...
}

# 直接修改配置文件

/Users/用户名/.yarnrc

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


registry "https://registry.npmmirror.com"
ignore-engines true
lastUpdateCheck 1706663282683
strict-ssl false

/Users/miyufeng/.npmrc

registry=https://registry.npm.taobao.org/
phantomjs_cdnurl=https://npm.taobao.org/dist/phantomjs
chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
sass_binary_site=https://npm.taobao.org/mirrors/node-sass
ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
CHROMEDRIVER_CDNURL=https://npm.taobao.org/mirrors/chromedriver
OPERADRIVER=https://npm.taobao.org/mirrors/operadriver
ELECTRON_BUILDER_BINARIES_MIRROR=https://npm.taobao.org/mirrors/electron-builder-binaries/
PYTHON_MIRROR=https://npm.taobao.org/mirrors/python
global="="

# .npmrc

# .npmrc配置文件的优先级

.npmrc可以理解成npm running cnfiguration,即npm运行时配置文件。

.npmrc可以设置package.json中依赖包的安装来源,即从哪里下载依赖包。

一般情况下,我们的电脑中有多个.npmrc文件,我们在安装包时,npm按照如下顺序读取这些配置文件:

  1. 项目配置文件: /project/.npmrc

  2. 用户配置文件:~/.npmrc

    我们可以通过如下命令,来获取.npmrc用户配置文件路径: 如果想恢复默认配置,只需要将用户配置文件~/.npmrc删除即可。

  3. 全局配置文件:$PREFIX/etc/npmrc 我们可以通过如下命令,来获取.npmrc 全局配置文件路径$PREFIX

    npm config get prefix
    

    【注意】如果你不曾配置过全局文件,该文件不存在。

  4. npm内置配置文件/path/to/npm/npmrc

    我们可以通过如下命令,获取npmrcnpm的路径:

    which npm
    

    npm同级别, 使用which npm获取npm的路径。

# .npmrc设置的命令行

在讲解如何设置.npmrc之前,我们需要了解设置文件的命令行。

我们一般使用key-value的方式来设置文件,如下所示:

npm config set key value

例如,设置仓库信息,可以使用下述命令行:

npm config set registry https://repo.huaweicloud.com/repository/npm/

# 如何设置.npmrc

  1. 设置项目配置文件

    项目下.npmrc文件的优先级最高,可以给每个项目配置不同的镜像,项目之间的配置互不影响。

    在项目的根目录下新建.npmrc文件,在里面以key=value的格式进行配置。

    registry=https://registry.npm.taobao.org
    

    也可以指定特殊的命名空间(scope)的来源。

    比如,以@testNpmRc开头的包从registry=https://npm.xx.com这里下载,其余全去淘宝镜像下载。

    registry=https://registry.npm.taobao.org/
    @testNpmRc:registry = https://npm.xx.com
    
  2. 设置用户配置文件

    可以直接通过如下命令:

    npm config get userconfig
    

    找到用户配置文件的路径,直接仿照上述方法修改该文件。

    当然,也可以通过npm config set命令继续设置,如下所示:

    npm config set registry https://registry.npm.taobao.org
    

    如果想要删除一些配置,可以直接编辑.npmrc文件,也可以使用命令进行删除,例如:

    npm config delete registry
    
  3. 设置全局配置文件

    方法同设置用户配置文件一样,只不过在使用命令行时需要加上-g参数,如下所示:

    npm config set registry https://registry.npm.taobao.org -g
    
  4. npm命令添加注册源选项

    比如,临时使用淘宝镜像,如下所示:

    npm --registry=https://registry.npm.taobao.org [npm命令]
    

    又比如,使用npm安装依赖包,如下所示:

    npm install  --registry https://registry.npmjs.org
    

    但不推荐用这种做法,更推荐设置项目配置文件.npmrc

# 配置发布组件

npm配置组件发布的方式有如下两种:

  • 通过配置packege.json实现
  • 通过配置文件.npmrc实现
  1. package.json配置方式

    # @aa是组件的scope。
    # scope在模块名name中使用时,以@开头,后边跟一个/
    {
       "name": "@aa/xxx", // 发布npm包的名字
       "version": "1.0.0", // 你的npm包版本
       "description": "xxxx", // 包的描述
       "main": "dist/btn.js", // 指定组件的主入口文件
       "publishConfig": {
           "registry": "要发布的私有仓库地址,然后在.npmrc配置用户名密码"
       }
       ......
    }
    
  2. .npmrc配置方式

    # package.json不做任何仓库的配置:
    {
       "name": "@aa/xxx", // 发布npm包的名字
       "version": "1.0.0", // 你的npm包版本
       "description": "xxxx", // 包的描述
       "main": "dist/btn.js", // 指定组件的主入口文件
       ......
    }
    
    # .npmrc配置仓库地址和用户名密码:
    @aa:registry=私仓地址
    

    配置好仓库信息后,执行如下发布命令,即可将打包好的组件发布到仓库中:

    npm publish
    

# npm常用命令

npm config set <key> <value> [-g|--global]  //给配置参数key设置值为value;
npm config get <key>                        //获取配置参数key的值;
npm config delete <key>  [-g|--global]      //删除置参数key及其值;
npm config list [-l]                		//显示npm的所有配置参数的信息;
npm config edit                     		//编辑用户配置文件
npm get <key>                           	//获取配置参数 key 生效的值;
npm set <key> <value> [-g|--global]         //给配置参数key设置值为value;

# 重要备注

# yarn

yarn会读取.npmrc的配置文件,所以不必为yarn再设置一次。

# scope命名空间

上文提到的指定特殊的命名空间(scope)的来源,如下代码所示:

@aa:registry=https://repo.huaweicloud.com/repository/npm/

其中,@aa是组件的scopescope在模块名name中使用时,以@开头,比如:

# 在package.json的dependencies标签中加上即可使用。
"dependencies": {
    "@test/mypackage": "^1.3.0"
}

# 镜像出错

.npmrc文件配置了私有包registry源,但是当前的下载源是淘宝镜像,可能会报如下错误:

error Command failed with exit code 1

可以将当前的下载源改成私有包registry源,如果改了之后还报错,可以尝试将lock文件,或者node_modules文件删掉,重新开始下载。

更新时间: 2024年2月2日星期五下午1点16分