目录
  1. 1. 命令行窗口
    1. 1.1. 使用
    2. 1.2. 常用指令
  2. 2. Node.JS
    1. 2.1. 简介
    2. 2.2. 特点
    3. 2.3. Node的用途
    4. 2.4. 安装
    5. 2.5. 模块化
      1. 2.5.1. 模块的暴露
        1. 2.5.1.1. exports 和 module.exports
      2. 2.5.2. 模块的引用
      3. 2.5.3. 模块结构
    6. 2.6.
      1. 2.6.1. 包结构
      2. 2.6.2. 包描述文件
      3. 2.6.3. package.json和package-lock.json
初始NodeJS

命令行窗口

(小黑屏)、CMD窗口、终端、shell

使用

开始菜单 —> 运行 —> CMD —> 回车

常用指令

  • dir 列出当前目录下的所有文件
  • cd 目录名 进入到指定的目录
  • md 目录名 创建一个文件夹
  • rd 目录名 删除一个文件夹
  • 目录

      `.` 表示当前目录
      `..` 表示上一级目录
    
  • 环境变量(windows系统中变量)

path

C:\work\jdk\jdk1.7.0_75/bin;
%CATALINA_HOME%/bin;
C:\work\soft\tools\AppServ\Apache24\bin;
C:\work\soft\tools\AppServ\php5;
C:\Users\lilichao\AppData\Local\Programs\Fiddler;
C:\work\environment\Egret\Egret Wing 3\bin;
C:\Users\lilichao\AppData\Roaming\npm;
C:\Program Files\MongoDB\Server\3.2\bin;
C:\Users\lilichao\Desktop\hello
  • 当我们在命令行窗口打开一个文件,或调用一个程序时,
     系统会首先在当前目录下寻找文件程序,如果找到了则直接打开
    
    如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止
    如果没找到则报错
  • 所以我们可以将一些经常需要访问的程序和文件的路径添加到path中,
     这样我们就可以在任意位置来访问这些文件和程序了
    

Node.JS

  • Node.js是一个能够在服务器端运行JavaScript的开放源代码、 跨平台JavaScript运行环境。
  • Node采用Google开发的V8引擎运行js代码,使用事件驱动、 非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传 输量和规模。
  • Node大部分基本模块都用JavaScript编写。在Node出现之前, JS通常作为客户端程序设计语言使用,以JS写出的程序常在用 户的浏览器上运行。
  • 目前,Node已被IBM、Microsoft、Yahoo!、Walmart、 Groupon、SAP、 LinkedIn、Rakuten、PayPal、Voxer和 GoDaddy等企业采用。

简介

  • node是一款对ES标准实现的JS引擎
  • 通过node可以使js在服务器中运行
  • node就是一款使用js编写的web服务器
  • node底层是使用c++的编写的
  • node的中js引擎使用的chrome的v8引擎

特点

  1. 非阻塞、异步的I/O
  2. 事件和回调函数
  3. 单线程(主线程单线程,后台I/O线程池)
  4. 跨平台

Node的用途

  • Web服务API,比如REST

  • 实时多人游戏

  • 后端的Web服务,例如跨域、服务器端的请求
  • 基于Web的应用
  • 多客户端的通信,如即时通信

安装





模块化

  • ES5中没有原生支持模块化,我们只能通过script标签引入js文件来实现模块化一个js文件就是一个模块
  • 在Node中,每一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问
  • 在node中为了对模块管理,引入了CommonJS规范

模块的暴露

我们可以通过exports 来向外部暴露变量和方法

  • 只需要将需要暴露给外部的变量或方法设置为exports的属性即可
  • 也可以使用module.exports暴露
exports.x = "我是module.js中的x";
exports.y = "我是y";
exports.fn = function () {

};

module.exports = {
name:"猪八戒",
age:28,
sayName:function () {
console.log("我是猪八戒");
}
};

在Node中,每一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问

exports 和 module.exports

  • 通过exports只能使用.的方式来向外暴露内部变量
exports.xxx = 值
  • 而module.exports既可以通过.的形式,也可以直接赋值
module.exports.xxx = 值
module.exports = {}

模块的引用

在node中,通过require()函数来引入外部的模块

  • require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块

  • 这里路径,如果使用相对路径,必须以...开头

    • require("./module");
    • require("../module");
  • 我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块

    • 模块分成两大类

      • 核心模块

        ​ - 由node引擎提供的模块

        ​ - 核心模块的标识就是,模块的名字

      • 文件模块

        ​ - 由用户自己创建的模块

        ​ - 文件模块的标识就是文件的路径(绝对路径,相对路径)

        ​ 相对路径使用...开头

// 引入文件模块
var md = require("./module");
// 引入核心模块
var fs = require("fs");

console.log(md);
console.log(fs);

在node中有一个全局对象 global,它的作用和网页中window类似

  • 在全局中创建的变量都会作为global的属性保存
  • 在全局中创建的函数都会作为global的方法保存

模块结构

当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码

function (exports, require, module, __filename, __dirname) {

其次会在代码的最底部,添加如下代码

}

实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参

  • exports

    • 该对象用来将变量或函数暴露到外部
  • require

    • 函数,用来引入外部的模块
  • module

    • module代表的是当前模块本身
    • exports就是module的属性
    • 既可以使用 exports 导出,也可以使用module.exports导出
  • __filename
    • g:\BaiduYunDownload\(5)NodeJS\source\01.node\module.js
  • __dirname
    • g:\BaiduYunDownload\(5)NodeJS\source\01.node

  • CommonJS的包规范允许我们将一组相关 的模块组合到一起,形成一组完整的工具。
  • CommonJS的包规范由包结构包描述文件两个部分组成。

包结构

  • 用于组织包中的各种文件
  • 包实际上就是一个压缩文件,解压以后还 原为目录。符合规范的目录,应该包含如下文件:
    • package.json 描述文件
    • bin 可执行二进制文件
    • lib js代码
    • doc 文档
    • test 单元测试

包描述文件

  • 包描述文件用于表达非代码相关的信息, 它是一个JSON格式的文件
  • package.json, 位于包的根目录下,是包的重要组成部分。

demo

{
"name": "npm-demo",
"version": "0.0.1",
"description": "这是一个测试项目",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "LHH",
"license": "ISC",
"dependencies": {
"art-template": "^4.12.2",
"jquery": "^3.2.1"
}
}

  • 对于咱们来说,最有用的是dependencies选项,可以用来帮助我们保存第三方包的依赖信息。
  • 如果你的nod_modules删除了也不用担心,我们只需要:npm install就会自动把package.json中的dependencies中的所有依赖都下载回来
  • 建议每个项目的根目录都有一个package.json文件
  • 建议执行npm install 包名的时候都加上--save这个选项,这个是用来保存依赖信息的

package.json和package-lock.json

npm 5以前是不会有package- lock .json这个文件的。
npm 5以后才加入了这个文件。
当你安装包的时候,npm都会生成或者更新package-lock.json这个文件。

  • npm 5以后的版本安装包不需要加--save参数,它会自动保存依赖信息
  • 当你安装包的时候,会自动创建或者是更新package- lock.json这个文件
  • package-lock. json这个文件会保存node_ modules中所有包的信息(版本、下载地址)
    • 这样的话重新npm install的速度就会提升
  • 从文件来看,有一个lock称之为锁
    • 这个lock是用来锁定版本的
    • 如果项目依赖了1.1.1版本
    • 如果你重新isntall其实会下载最新版本,而不是1.1.1
    • 我们的目的就是希望可以锁住1.1.1这个版本
    • 所以这个package- lock.json这个文件的另-个作用就是锁定版本号,防止自动升级新版
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-05/28/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/NodeJS/%E5%88%9D%E5%A7%8BNodeJS/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论