npm 使用记录

在 Mint 下安装 pencil,折腾半天,发现它对 firefox 的支持,只到 46.0 。本来打算研究下怎么用 xulrunner 来跑 pencil 这个 web 应用,查看项目资源的时候,发现原来他们在筹划用 node.js 来重写项目。虽然还没有正式发布,但是貌似已经可以用了...有点猴急想试试,遂有了后面的尝试。

 

1. node.js 的安装包

作为 node.js 的应用包,首先应该具备的就是 package.json。下面是这次尝试的 app 中 package.json 的部分内容。

{
  "name": "Pencil",
  "productName": "Pencil",
  "description": "An open-source GUI prototyping tool that is available for ALL platforms.",
  "version": "3.0.0-beta.2",
  "author": {
    "name": "Evolus",
    "url": "http://evolus.vn",
    "email": "contact@evolus.vn"
  },
  "maintainers": [
    {
      "email": "an.duong@evolus.vn",
      "name": "dgthanhan"
    },
    {
      "email": "ngtdungnt@gmail.com",
      "name": "Nguyen Tien Dzung"
    }
  ],
  "copyright": "Copyright © 2008-2016 Evolus. All rights reserved.",
  "homepage": "http://pencil.evolus.vn",
  ...
  "dependencies": {
    "archiver": "1.0.0",
    "electron-squirrel-startup": "1.0.0",
    "less": "2.7.1",
    "lodash": "4.13.1",
    "moment": "2.13.0",
    "nugget": "2.0.0",
    "q": "1.4.1",
    "rimraf": "2.5.2",
    "tmp": "0.0.28",
    "unzip2": "0.2.5"
  },
...
}

从中,我们可以看到这个应用的一些基本信息,如作者版本,license,版本,依赖关系等等。

 

2. npm

npm 的全称是 node package manager,即 node.js 的安装包管理工具。这类似与红帽子里面的 yum ,以及 debian 里面的 apt-get。

npm 我是用 apt-get 装的,无新意。或者使用脚本安装也可以:

curl http://npmjs.org/install.sh | sh

然后,安装上面 pencil 中的 app。安装使用 npm install指令,该指令会在当前目录中搜索 package.json 文件。

安装完之后,出现的第一个问题是,无法连接到 registry。

npm ERR! Error: failed to fetch from registry:

搜了一下,原来是我大天朝把官方的库地址给墙了的缘故;换源后问题解决。具体是,编辑 "~/.npmrc"文件,并将第一行替换为:

registry = https://r.cnpmjs.org/

更换源之后,继续安装,又出现下面类似问题:

npm ERR! Error: No compatible version found:

提示需要的依赖包版本无法匹配,查看 package.json 。看到关于这个包的定义:

    "nugget": "^2.0.0",

而 cnpmjs 提供的包里面,nugget 有以下版本:

npm ERR! message Valid install targets:
npm ERR! message ["1.6.2","2.0.0","1.6.1","1.5.5","1.6.0","1.5.4","1.5.3","1.5.2","1.5.1","1.5.0","1.4.1","1.4.0","1.3.0","1.2.0","1.1.3","1.1.2","1.1.1","1.1.0","1.0.0"]

那么 “^” 是什么意思呢?在 stackflow 上找到一篇问答,摘录如下:

  • ~version Allows patch-level changes if a minor version is specified on the comparator
  • ^version Allows changes that do not modify the left-most non-zero digit in the [major,minor,patch] tuple
  • version Must match version exactly
  • >version Must be greater than version
  • >=version etc
  • <version
  • <=version
  • 1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
  • http://sometarballurl (this may be the URL of a tarball which will be downloaded and installed locally
  • * Matches any version

那么,使用 ^ 意味着,这个代码包的版本必须大于等于指定版本,且主版本号不能改变。所以,被选有 2.0.0 的,那为什么没法匹配呢?且先不管,我这里的做法是,直接改为固定版本,及去掉 “^”。然后,依赖关系检查,以及代码包下载,顺利完成。

安装的最后,跳出如下提示:

npm ERR! Not compatible with your version of node/npm: archiver@1.0.0
npm ERR! Required: {"node":">= 0.10.0"}
npm ERR! Actual:   {"npm":"1.1.4","node":"0.6.12"}

node 版本不匹配。

猝。

 

3. nvm, node version manager

在刚查阅的各种资料中,找到有个叫 nvm 的家伙。可以支持系统安装多个版本的 node.js , 并可以在各个版本间切换。如此的话,使用更高版本的 node 也就没问题了。

有空再试。

posted @ 2016-06-14 09:21  Biiigfish  阅读(680)  评论(0编辑  收藏  举报