前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >npm nodejs 经典安装问题

npm nodejs 经典安装问题

作者头像
运维部落
发布2019-07-12 14:43:04
1.8K0
发布2019-07-12 14:43:04
举报
文章被收录于专栏:运维部落运维部落

为开发环境安装npm nodejs服务 读完这篇文章你可以了解到

  1. npm和nodejs的关系
  2. yum install nodejs的版本v0.10.48和官方最新稳定版本v10.16.0版本关系
  3. npm 安装nodejs语法报错死循环问题处理

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

7e09def3004548c88e833df16744eafb.png

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

0b2c529459cfb37ad6ad932199cd155f.png

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

代码语言:javascript
复制
但对我个人来讲,转型开发的路上,这篇文章在新手转型路上提供了全新认知。比起某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

代码语言:javascript
复制
yum install nodejs

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

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

代码语言:javascript
复制
# 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之间的关系了吧?

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
# 使用淘宝镜像,速度快
npm install -g cnpm --registry=https://registry.npm.taobao.org

代码语言:javascript
复制
# 需访问外国网站到国外下载所需软件包
npm install npm -g

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

代码语言:javascript
复制
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了
代码语言:javascript
复制
npm -v

BUT 问题就是从这里开始的

代码语言:javascript
复制
/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

还是自己报自己错误…

  • 死循环

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

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

代码语言:javascript
复制
yum remove nodejs -y
npm install -g cnpm --registry=https://registry.npm.taobao.org

b4106937a14818fae953804170024d68.png

终于好了,舒畅….

【the end】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为开发环境安装npm nodejs服务 读完这篇文章你可以了解到
    • npm和nodejs的关系
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档