Sinopia搭建私有仓库坎坷之路

公司内部项目需要托管私有包到内部服务器,需要搭建私有NPM仓库,本文记录了使用Sinopia在局域网搭建私有仓库中遇到的各种问题和解决方案

  • 首先直接安装Sinopia,一般情况下总会报错的
    npm install -g sinopia 可能遇到的错误:
    • python环境没安装
      gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable. sinopia依赖node-gyp,node-gyp依赖python2.7,所以需要安装python2.7,并且记得设置环境变量python
    • fs-ext/crypt3报错
      可以找到sinopia安装目录下的package.json文件,删掉其中的fs-ext/crypt3引用
      
        optionalDependencies:
          # those are native modules that could fail to compile
          # and unavailable on windows
          fs-ext: '>=0.4.1 <1.0.0-0'
          crypt3: '>=0.1.6 <1.0.0-0' # for sinopia-htpasswd
      
    

    删除sinopia安装目录node_modules里的fs-ext和crypt3相关的包,否则执行npm添加用户和登陆验证时会报错。包括:.0.2.0@crypt3,.0.6.0@fs-ext,crypt3和fs-ext以及sinopia-htpasswd\node_modules下的crypt3和fs-ext(如果有的话)

  • 运行
    • pm2
      pm2 start sinopia
    • 直接启动
      sinopia

    pm2启动时是后台运行,直接启动是前台运行。

    此处推荐使用pm2启动设置开机启动:
    pm2 start sinopia pm2 save pm2 startup

    默认情况下搭建的sinopia仓库只能本机访问,如果需要暴露给外部访问的话有两种方式:

    1. 参数控制: sinopia -l targetIP:4873 向targetIP开放访问权限,如果是任何机器配置成0.0.0.0:4873
    2. 配置文件: 默认情况下启动sinopia后可以看到sinopia启动配置文件
      _config.yml
      打开config.yaml文件,在尾部追加listen 0.0.0.0:4873,之后每次sinopia启动自带追加的参数。
  • 实际项目应用
    1. 把自定义包开发完成之后,在工作目录下安装nrm仓库管理工具。
      npm install -g nrm
    2. 在nrm列表注册上述私有仓库
      _config.yml
    3. 查看并切换到私有仓库
      _config.yml
      _config.yml
    4. npm登录
      _config.yml
    5. 模块发布 如果忘记更新package.json的版本号时就发布,会报错。
      _config.yml
      修改package.json版本号之后再发布:
      _config.yml
    6. 此时查看私有仓库页面,可以看到刚才发布的模块
      _config.yml
    7. 在其他项目中使用刚才发布的模块
      _config.yml
    8. 最后记得把nrm源切换回来。
Written on September 26, 2018