Node.js入门学习

Node.js学习

官方定义:

  • Node.js运行环境是在Chrome的V8 JavaScript引擎上. Node.js应用事件驱动,无阻塞I/O模型,所以轻量级且高效。
    Node.js的包管理npm,是最大的开源生态库。

对于写在浏览器里面的JavaScript,浏览器充当了解析器的角色。而对于需要独立运行,Node.js就是一个解析器。每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器
中的JS可以操作DOM,浏览器就提供了document之类的内置对象。而运行有Node.js中的JS是服务器端JS,可以操作系统文件和搭建HTTP服务器,相应提供了fshttp等内置对象。

安装Node.js

macOS

    brew install node

Windows,�Node.js中文网, 下载Node.js安装.(尽量保证安装路径不要有空格,或者中文)

Paste_Image.png

Node.js的安装会把�nodejs和npm命令加到PATH里面去,所以在命令行里面能够访问到node和npm

Paste_Image.png

检查node版本及npm版本

Paste_Image.png

如何运行

打开终端,键入node进入命令交互模式,输入".exit"退出node命令交互模式

Paste_Image.png

可以输入一条代码语句后立即执行并显示结果,例如:

Paste_Image.png

如果要运行一大段代码的话,可以先写一个JS文件再运行。例如有以下hello.js

Paste_Image.png

写好后在终端下键入node hello.js
运行,结果如下:

Paste_Image.png

熟悉windows以下几个命令

  • tab(键) 自动补全命令
  • dir 列出当前文件夹下的文件
  • cls 清屏
  • cd 目录操作 cd..返回上一级目录 cd 目录名进入下级目录
  • mkdir 创建目录
  • 向上键,向上键找到历史命令
    当前在C盘,如果想去到D盘的目录,先D:
    注node交互模式下不能运行命令行命令。

模块

编写稍大一点的程序时一般都会将代码模块化。在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。
在编写每个模块时,都有require exports module三个预先定义好的变量可供使用。

require

require函数加载别的模块。“./"开头相对当前目录,字符开头表示内置模块或者NODE_PATH下的模块

    var foo1 = require('./foo');

exports

exports导出模块的公有方法和属性. 别的模块通过require函数使用当前模块时得到的就是当前模块的exports
对象。以下例子中导出了一个公有方法。

exports.hello =  function () {
    console.log('hello world');
}

var fn=require("./hello");
fn.hello();

module

通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。

module.exports = function(){
    console.log('hello world');
}

var hello=require("./hello");
hello();

以上代码中,模块默认导出对象被替换为一个函数。

HTTP服务器

var http = require('http');  
  
http.createServer(function (req, res) {  
  res.writeHead(200, {'Content-Type': 'text/plain'});  
  res.end('Hello World\n');  
}).listen(8080);  
  
console.log('Server running on port 8080.');
Paste_Image.png

NPM

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

  • 允许用户从NPM服务器下载第三方包到本地使用
  • 允许用户将自己编写的包上传到NPM服务器供别人用

可以看到,NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。以下分别介绍这三种场景下怎样使用NPM。

选装cnpm

  • 说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事。来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”
  • 官方网址:http://npm.taobao.org
  • 安装:命令提示符执行
npm install cnpm -g --registry=https://registry.npm.taobao.org
  • 注意:安装完后最好查看其版本号cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误
Paste_Image.png

下载三方包

需要使用三方包时,首先得知道有哪些包可用。虽然npmjs.org提供了个搜索框可以根据包名来搜索,但如果连想使用的三方包的名字都不确定的话,就请百度一下吧。知道了包名后,比如上边例子中的jquery,就可以在工程目录下打开终端,使用以下命令来下载三方包。
安装第三方包 "jquery" “--save”会保存包引入配置到package.json

npm install jquery --save

作为项目的开发依赖安装

 npm install jquery --save-dev

下载好之后,jquery包就放在了工程目录下的node_modules目录中

Paste_Image.png

以上命令默认下载最新版三方包,如果想要下载指定版本的话,可以在包名后边加上@<version>,例如通过以下命令可下载2.1.0版的jquery

Paste_Image.png

package.json

Node.js项目配置文件,在项目目录下初始化package.json

npm init

package.json内容如下:

{
    "name":"demo",
    "main":"index.js" //定义入口文件
}

如果使用到的三方包比较多,在终端下一个包一条命令地安装未免太人肉了。因此NPM对package.json的字段做了扩展,允许在其中申明三方包依赖。因此,上边例子中的package.json可以改写如下:

{
  "name": "learnnode",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "dependencies": {
    "jquery": "^2.1.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC"
}

到目前为此我们写的Node.js都是应用在后台。如果我们在前端项目里面引入Node.js管理,遇到需要npm包的时候,npm install就可以,不用管包的依赖。比如npm install a, a又依赖于b,那么根据a的package.json声明,安装a的同时也会安装b。只需要一个npm install a,我们不需要关心a背后的依赖。这就是前端工程化的一部分。前段时间我们学习Vue.js, 安装Vue.js的时候,看到这样的代码

# 全局安装 vue-cli
$ npm install -g vue-cli
# 创建一个基于 "webpack" 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm install
$ npm run dev

webpack就是构建工具的一种,构建工具是用来实现前端工程化的。前端框架和包越来越多,在github上有找一些资源,没有构建工具都无法运行项目。学习构建工具已经很紧迫了。但是前端工程化能做更多。接下来,重点介绍Gulp(Gulp和webpack能结合起来使用)。Gulp学习传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,578评论 2 41
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,041评论 2 58
  • JavaScript 模块化编程 网站越来越复杂,js代码、js文件也越来越多,会遇到什么问题? 命名冲突; 文件...
    magic_pill阅读 1,345评论 0 1
  • 总结一: [node.js总结](http://www.cnblogs.com/Darren_code/archi...
    xiumeiii阅读 1,848评论 0 14
  • 近些年​关于中国传统武术的争议经久不衰,武术传承过程中的怪相不只是现今社会才出现的。徐皓峰的《倭寇踪迹》就为我们展...
    d55a31d8c39e阅读 781评论 0 1