NODE01-Node.js基础使用

  前端技术的发展主要还是Javascript推动,当HTML+CSS+Javascript的发展到jQuery的时候,Javascript已经从浏览器运行环境进化到虚拟机运行环境,然后向Java看齐,到Google的AI框架也支持Javascript,其中尤其是ES6的变化。从此Javascript向正常语言发展,出现了服务器端开发框架Express + Jade(Pug+EJS),包括webpack-dev-server都是以Express框架为基础的轻量级框架,但同时浏览器端的开发也在出现不同的开发技术。
  Javascript就有了两个运行方式,这两种运行方式怎么2in1就成了一个折腾点。首先是Babel框架用来处理ES6与浏览器端语法的兼容,然后打包成Webpack,Webpack后开始出现模块化技术,HTML组件化,CSS组件化,开始出现各种Loader与插件处理技术:HTML-loader,CSS-loader,Vue-loader。这些模块技术催生五花八门的脚本规范,比如CSS相关的less等等,这些技术采用繁碎的配置,饿了么开发的cooking框架用开简化这种配置(还有webpack-cli,vue-cli等脚手架模块都是为了简化配置而来),从此前后端分离开发技术就日趋成熟了。


  本主题就从Javascript标准规范谈起,这个规范的实现是Node.js(不完全支持最新的ES标准),主要内容包含:
  1. Node.js的编程模式;
  2. Node.js的支持的Javascript语法支持;


  • 说明:
    • Node.js的安装比较简单,可以在官网参考不同平台下的安装:
      1. Window
      2. Linux:Redhat,Centos,Ubuntu,Suse等
      3. Mac OS X

Node的编程方式

交互式编程

  • 交互式编程:

    • 编写一行执行一行,与运行环境交互。
  • 注意;

    • 需要先启动执行环境,目前脚本语言基本上都支持交互式编程(号称:REPL:Read Eval Print Loop)

启动node环境

  • 安装好node后,就可以直接执行node命令了;
  1. 查看node的帮助
    node --help
  • Node.js的虚拟机的在线帮助
  • node命令行帮助显示,除了命令行参数外,node的执行还受一些环境变量影响;
  1. 启动Node运行环境
  • node交互式编程环境

REPL命令在线帮助

  • REPL的在线内部命令都是用.开头,查看帮助,使用.help

    • 官方文档说明还支持一些快捷键,在帮助中没有出现,不过不用也罢。
  • Node的REPL联线帮助使用

常用的REPL命令

  1. 退出

    • .exit
  2. 保存为js文件

    • .save a.js
  • save指令的使用
  1. 加载js文件
    • .load a.js
  • load指令的使用

支持的Javascript基本语法

  • Node虚拟机支持基本的Javascript语法:
    1. 基本语言结构;
    2. 语法三要素;
    3. 函数与面向过程;
    4. 面向对象;
    5. 异常;
    6. 内置对象;
  • 由于Node运行环境不是浏览器运行环境,所以与浏览器相关的对象域操作不支持(在反爬虫破解中,那种依靠BOM对象,字体等反爬的JS脚本破解起来特别麻烦,需要仿真浏览器环境来完成)
    • BOM对象;
    • DOM对象;
  • 内置对象使用例子

REPL独特语法支持

交互式多行语句

  • 多行是node运行环境自行判定;

  • 多行语句的演示例子

下划线变量

  • 下划线在node环境中具备特殊的用途,用来保存上一次命令的输出值;
    • 交互式编程的返回值获取

非交互式编程

  • 非交互式编程两种方式:

    • 使用node直接加载执行;
    • 在交互式环境中使用内部命令.load加载执行;
  • 注意:

    • Javascript与python一样,直接从文件第一行开始执行,不需要main执行入口函数等(区别于传统的C与Java程序);

编写js文件

  • Node遵循的ES标准,脚本文件如下:
    var sum = 0;
    for(var i = 1; i<=100; i++){
        sum += I;
    }

    console.log("1-100的和是:" + sum);

  • 把代码保存为js文件(我们保存的文件名是:n01_mode_file.js

执行js文件

  • 执行命令:

    • node js文件
  • 源代码编程运行

npm工具与第三方模块

  • 正如其他语言一样,语言依靠其他模块(主要包含系统模块)才能实现强大的功能,ES6(ECMAScript 6.0 )Javascript一样,也需要模块库,一般模块库有:
    1. 标准模块库(随运行环境自带的模块)
    2. 第三方模块(需要单独安装)
  • Node运行环境提供npm工具专门用来下载第三方模型(类似评估系统的brew,python的pip,Linux的yum一样)
    • 比如区块链访问的javascript访问模块就是第三方模块。

node标准模块

  • Node.js官方文档中提供标准模块的帮助,由于我们只关注Web前端开发的部分,所以很多模块不关注。地址如下:

    • http://nodejs.cn/api/
  • 算是node.js的标准API

全局安装

  • 全局安装在在安装指令中使用-g选项即可

    • 安装指令:npm install 模块名 -g
  • 全局安装的位置是下面两个目录之一:

    1. node的安装目录
    2. /usr/local目录下

局部本地安装

  • 局部安装位置,会在npm命令执行时的工作目录下创建(没有的话)一个模块目录(./node_modules)安装。
    • 安装指令:npm install 模块名

npm的其他功能

  1. 查看已经安装的模块
    • npm list -g
    • npm list
    • npm list 模块名
  • 第三方安装模型查看
  1. 卸载模块

    • npm uninstall 模块名
  2. 万能神器npm的命令行帮助

    • npm --help
    • 可以查阅到模块的全局安装目录
  • 全局安装目录信息查看
  1. package.json模块管理文件
    • 模块管理主要通过package.json来管理,此文件被破坏,模块的加载就会出现问题。

Node支持的语法

浏览器Javascript语法的支持

  • 从基本语法来说,浏览器Javascript与服务器Javascript支持的是相同的语法标准;

浏览器对象的访问

  • 因为在node运行环境中缺少浏览器环境,所以浏览器中的BOM对象与DOM对象都无法访问。
    • 注意:浏览器JS需要依赖html文件执行与加载,这一点与Node运行的js是不同的。Node执行js脚本,但无法识别与执行html文件。

内置对象

  • Javascript标准内置对象,Node.js都支持;比如Date等。但是Node运行环境支持更多的内置对象或者类,比如:
    • Buffer类
    • Stream类

require与标准模块

  • 引入标准模块与第三方模块使用require函数。

    • Vue对象也可以通过服务器脚本加载执行;
  • require函数的定义


    require(id)

  • 参数说明:
    • id:模块名或者模块路径
    • 返回:加载的模块内容

import与ES实现标准

  • ES6按照Java的方式,希望使用import引入模块,但实际早期使用require,在新的标准中引入import;

ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。
ES6在2015年6月正式发布,所以ES6也有一个别称ES2015;


在ES6之前,也可以使用import / export,这依赖一个项目:babel,他b把import/export转换为require/export。

  • 注意:

    • 因为上面所描述的缘故,import与require还是存在差异;
  • 下面是使用net模块,创建一个服务器监听的例子:

    const net = require("net");
    // console.log(net);

    // 创建服务器对象,绑定了一个connection事件
    var server = new net.Server(
        function(c){
            console.log("有用户链接:" + c.remoteAddress);

        }
    );

    server.listen(
        9999, 
        function(){
            console.log("服务器已经启动,等待客户链接");
        }
    )

  • 运行:
    • Javascript也像Java一样开发网络通信程序
  • 启动浏览器,在地址栏输入http://127.0.0.1:9999就可以访问这个socket网络服务了。

    • 注意:实际上这个socket还提供IPC通信(在Window就是管道文件,在Linux就是Domain套接字,实际也是双工管道文件)
  • 注意:

    • import的使用与CommonJS存在不兼容的情况,需要特殊的要求。;
    • javascript基本上具有大部分语言具有的标准库,包含网络、数据库访问等;

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

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,038评论 0 3
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,054评论 0 2
  • JavaScript 模块化编程 网站越来越复杂,js代码、js文件也越来越多,会遇到什么问题? 命名冲突; 文件...
    magic_pill阅读 1,401评论 0 1
  • 专注全栈大前端,爱前端整理了一批2019年最新WEB前端教学视频,不论是零基础想要学习前端还是学完在工作想要提升自...
    大前端圈子阅读 2,390评论 0 3
  • 异步I/O 在Node中,我们可以从语言层面很自然的进行一并I/O操作,每个调用之间无须等待之前的I/O调用结束,...
    Upcccz阅读 507评论 0 2