npm nodejs 经典安装问题

自从转开发后,碰到了很多以前没有遇到过的问题,搜索出来的文章因为思维方式和关键字的转变,对应的搜索结果也和以前大不一样,我也发现自己以前对很多技术的理解被国内的技术“专家博客”误导。最刺激我认知的莫非昨天的《99%的人都理解错了HTTP中GET与POST的区别》。虽然刚发出来就被从业老鸟喷:

图片



图片

7e09def3004548c88e833df16744eafb.png

这篇文章有误,1.100 continue不是必须发送的,客户端要带上“expect: 100-continue”头(rfc2616),服务端才会给这个多出来的响应,随便抓抓包都知道很多post请求都是一次发送完成的;2.http是应用层协议,管不了tcp层发几个包,试想你要post一兆字节的数据比如一张图片,tcp至少要发几百个包的;这文章看到好几回了,一看就知道是个一知半解的半瓶子醋写的....

0b2c529459cfb37ad6ad932199cd155f.png

但这里对于一个运维做了近10年近期艰难转开发的小编还是要讲句公道话的..

但对我个人来讲,转型开发的路上,这篇文章在新手转型路上提供了全新认知。比起某3c、某cto所谓的专业博客,对于GET(查),POST(改),delete(删)片面解读误导一片从业人员来讲好了很多了。一方面期望国内从业人员能真正潜心研究技术,创作更优质的原创,同时也更欢迎大牛投稿更专业解读..

今天的这篇文章也是在部署开发环境时遇到的小问题,问题本身更贴近于运维技术,但前端同学也肯定会遇到类型问题,但在小编寻求帮助的过程中发现前端同学对于自己日常应用的这些工具最了解甚少,网上搜索到的内容也是无法直视。所以在问题解决后也第一时间总结出来,希望对大家能有所帮助。

npm和nodejs的关系

  • npm是什么

npm(全称 Node Package Manager,即“node包管理器”)是Node.js默认的、以JavaScript编写的软件包管理系统。

npm完全用JavaScript写成,最初由艾萨克·施吕特(Isaac Z. Schlueter)开发。艾萨克表示自己意识到“模块管理很糟糕”的问题,并看到了PHP的PEAR与Perl的CPAN等软件的缺点,于是编写了npm

npm会随着Node.js自动安装[3]。npm模块仓库提供了一个名为“registry”的查询服务,用户可通过本地的npm命令下载并安装指定模块。此外用户也可以通过npm把自己设计的模块分发到registry上面[4]。

registry上面的模块通常采用CommonJS格式,而且都包含一个JSON格式的元文件[5]。截止到2016年7月,npm的registry上面已经注册了超过280,000个模块[6]。

npm的模块以“先到先得”的原则注册,各模块作者不会发生混乱。然而一旦有人撤回自己发布的模块,那么不仅会使依赖那个模块的项目出现问题,还会带来安全风险[7]。例如有一个模块叫做“left-pad”,其中只有一个字符串对齐的功能。但是,当作者把它从registry里面移除之后,许多模块便无法正确构建[8]。

npm的registry没有审核机制,因此会存在一些低质量、不安全甚至有害的模块[5],不过npm服务器的管理员也可以删除有害模块并阻止不怀好意的用户[9]。

另外也有人为npm制作了统计功能,这样可以让开发者了解各模块的使用情况,帮助他们选择合适的模块

如上内容参考自维基百科: https://zh.wikipedia.org/wiki/Npm

懂了吗?简单直白点讲就是功能类同yum, apt, pip的包管理器
还不理解的话…那咳咳…就放弃吧…哈哈

  • 安装npm & nodejs

思路第一步:安装

运维人老的思维方式,yum

yum install nodejs

安装nodejs的时候,其实顺路把npm也安装好了。

但是安装的版本喜人。。。。:

node -v
v0.10.48
npm -v
1.3.6

而实际官方实际的版本:

  • node已经到了10.16

  • npm 已经到了6.9版本

这里只能讲李纳斯发行Linux版本是真的只管运维类工具,不管开发类工具的呀..太偏心了.哈哈。这版本也差的太远了点,虽然v0.10版本还在维护,但基本很少在用了..官方的版本lease log大致是如下这样的,所以大家懂了v0.10.48和v10.16之间的关系了吧?

Node.js 12.x
Node.js 10.x
Node.js 9.x
Node.js 8.x
Node.js 7.x
Node.js 6.x
Node.js 5.x
Node.js 4.x
Node.js 0.12.x
Node.js 0.10.x

思路第二步:安装

ok, 传统思路升级npm版本:

# 使用淘宝镜像,速度快
npm install -g cnpm --registry=https://registry.npm.taobao.org

# 需***到国外下载所需软件包
npm install npm -g

升级倒是很顺利,一大拕类似告警后安装成功:

npm ERR! not a package /root/tmp/npm-24143-sPtWrVdn/1561514457262-0.3009792324155569/tmp.tgz
npm http GET https://registry.npmjs.org/npm
npm http 200 https://registry.npmjs.org/npm
npm http GET https://registry.npmjs.org/npm/-/npm-6.9.0.tgz
npm http 200 https://registry.npmjs.org/npm/-/npm-6.9.0.tgz
npm WARN package.json path-is-inside@1.0.2 No README data
npm WARN package.json sorted-object@2.0.1 No README data
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
/usr/bin/npx -> /usr/lib/node_modules/npm/bin/npx-cli.js
npm WARN unmet dependency /usr/lib/node_modules/block-stream requires inherits@'~2.0.0' but will load
npm WARN unmet dependency undefined,
...
...
  • 检测是否ok了

npm -v

BUT 问题就是从这里开始的

/usr/lib/node_modules/npm/bin/npm-cli.js:84
      let notifier = require('update-notifier')({pkg})
          ^^^^^^^^
SyntaxError: Unexpected identifier
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:945:3

从报错上看不是难看出,nodejs语法错误,原本不是什么大错误,但问题是这是从安装好的nodejs, 报自己的nodejs错误,这不就是传说中的鸡生蛋,蛋生鸡的问题嘛…有点头大

思路第三步:安装源码包

官网下载最新版本稳定版本号,
https://nodejs.org/en/download/
下载可直接使用…,因为是预编译好的,所以下载即可使用。node版本正常了。npm的版本..

图片e7cf987c0fa2b3d0fdb5fd9a77c81b98.png

还是自己报自己错误…

  • 死循环

卡在这里一时没有出路,网上也没有提供很好的办法。

死马当活马医的心态,很卸载(有风险)再升级的办法试。

yum remove nodejs -y
npm install -g cnpm --registry=https://registry.npm.taobao.org

图片b4106937a14818fae953804170024d68.png

终于好了,舒畅….


猜你喜欢

转载自blog.51cto.com/15060546/2651569