这货, 本来我就当做一个工具再用, 但是, 当我学习使用electron的时候出事了, 被这货卡住了.

install会不成功

参考: https://github.com/electron/electron-quick-start/issues/127
我们从头捋一下:

本来 : npm

npm install xxxx
npm install --verbose #to see the download progress
npm update xxx
npm install moduleName ,则是将模块下载到当前命令行所在目录。
npm install moduleName -g ,模块将被下载安装到全局目录中,即Node的安装目录下的node_modules下, 但是这么这么装, 导致项目没法用. 所以, 别这么装.

todo npm 安装的时候回报大量的警告, 咋办?

缓存目录: ~/.npm
npm install --cache-min 999 <package-name> #999分钟新鲜度以内的模块, 从缓存安装.

版本管理工具: 目前主流的node版本管理工具有两种,nvm和n http://www.imooc.com/article/14617

高能之前

在进行下面的高能操作之前, 需要搞清楚npm的基础操作

npm -l #列出所有命令参数
npm -v #看版本号
npm search xxx #查找xxx模块
npm view xxx #查看xxx模块的细节
npm publish #发布自己的模块
npm help json #查看package.json的所有可以用的属性, package.json的帮助文档
npm config list #这个可以看到目前的设置, 可以看到 registry 基本都指定的npmjs

项目根目录下面建议定义一个package.json, 这里面规定了项目的依赖包, electron-quick-start/package.json:

{
  "name": "electron-quick-start",
  "version": "1.0.0",
  "description": "A minimal Electron application",
  "main": "main.js", 注释:这里指定是载入入口
  "scripts": {
    "start": "electron ."
  },
  "repository": "https://github.com/electron/electron-quick-start",
  "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
  ],
  "author": "GitHub",
  "license": "CC0-1.0",
  "devDependencies": {
    "electron": "~1.7.8"
  }
"private": "true"  注释:这里指定不发布
}

registry相关

npm config list #可以看到 registry 地址
npm profile get #查看属性值, 需要你有registry用户才行.
npm view #查看registry信息, 能看到之前install失败的各种信息.
npm view npm repository.url #能看到registry的url

参考:

  • https://docs.npmjs.com/misc/registry
  • https://docs.npmjs.com 所有信息都可以在这个索引页搜索到
  • https://docs.npmjs.com/cli/view

图样图森破

那么, 目前很清晰了, 我们要做两件事:

  1. 缩减每次安装的尺寸, 包太大总是会失败的. so我们应该研究下-g选项.
  2. 使用淘宝的源, 其实我npm里面本来就有淘宝的源, 但是, 估计是electron特别傻.
npm install electron -g --verbose
npm install electron
npm install --verbose #to see the download progress

使用淘宝cnpm

#安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
#或者alias
alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"

# Or alias it in .bashrc or .zshrc
$ echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
  --cache=$HOME/.npm/.cache/cnpm \
  --disturl=https://npm.taobao.org/dist \
  --userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc
  
### 注意, cnpm的search不灵, search还是用npm吧, cnpm主要是安装, 他用的是国内的淘宝镜像.

上面的做了之后, 我们发现然并卵, 依旧死在: node install.js

# 然后我们发现了 ~/.npmrc 写了下面5句话.
registry = https://registry.npm.taobao.org
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs
ELECTRON_MIRROR="https://npm.taobao.org/mirrors/electron/"
SASS_BINARY_SITE="https://npm.taobao.org/mirrors/node-sass"

依旧无法解决, 继续踩各种坑, 附录有.npmrc更详细的内容.

参考:

  • https://docs.npmjs.com/files/npmrc
  • https://docs.npmjs.com/misc/config

-g选项

npm install -g express #这样就是-g安装, 安装之后模块可以命令行直接使用.
express #直接运行模块命令
######### 如果你的package.json里面有下面一行, 那么你的包也能被别人-g安装.
"bin":"./path/to/script"
###########################
npm install -g --verbose electron #可以看看安装过程.

.npmrc

// 位置: ~/.npmrc
registry=https://registry.npm.taobao.org/
disturl=https://npm.taobao.org/dist
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
NVM_IOJS_ORG_MIRROR=https://npm.taobao.org/mirrors/iojs
ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
SELENIUM_CDNURL=http://npm.taobao.org/mirrorss/selenium

参考:

  • https://npm.taobao.org/mirrors

所以, 是时候试试其他包管理器了.

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm 比npm要友好的多. 至少有各种进度啥的.

赞美万能的淘宝, 淘宝搞定了.

是时候展示真正的技术: cnpm

搞定一切, 赞美伟大的淘宝, 万能的淘宝, 行走于凡间的神灵, 尘世间的伟大的拯救者: 淘宝

版本管理工具

  1. nvm
  2. n
  3. nave
  4. ndenv
  5. nenv
nvm use 4 #用node4
nave use 6 #用node6
nvm install v0.10.24     #Install a specific version number
nvm use 0.10             #Use the latest available 0.10.x release
nvm run 0.10.24 myApp.js #Run myApp.js using node v0.10.24
nvm alias default 0.10.24#Set default node version on a shell

有人说docker才是最佳解决方案

参考: http://taobaofed.org/blog/2015/11/17/nvm-or-n/

更多工具

  1. npm的替代品, yarn, 它可以依赖于.npmrc的配置
  2. npm-check 可以解决更新依赖问题.