node.js 模块化 day1(2019.5.27)

1.课程介绍

  • NodeJS介绍(了解)
  • NodeJS准备工作(掌握)
  • NodeJS模块(掌握)
  • NPM(掌握)

2.NodeJs介绍

2.1.什么是NodeJs(自我理解)

首先在搞清楚什么NodeJs之前,我们先来聊聊JavaScript,只要做过开发的人都应该知道JavaScript是目前最为流行的前端(客户端)脚本语言,JavaScript在Web项目中的使用率可以说是99%以上,不夸张的举个例子:"现在你打开的100个网页中,有99个都使用了JavaScript"。

那么为什么JavaScript这么火,其实原因非常非常的简单,JavaScript出现赋予网页新的生命力,从一开始它只为表单验证而生,到现在百万亿的网站使用JavaScript来做的各种效果及人性化的功能,估计用一本书也很难写完JavaScript在前端所做的贡献和地位。

如果一个东西灵活到你都无法驾驭了,你就会觉得这对于使用者来说并不是一件好事情,不过这些在我看来正是它为何最终能走向后端开发的原因。对于后端千变万化的功能来说,或许一个灵活的语言,能让我们写出更灵活的代码。

进入我们的正题,JavaScript以前只是作为一门前端脚本语言,一门语言的运行,是需要执行环境(浏览器),就如同我们的Java代码,它需要运行在JVM中。JavaScript也不例外,JavaScript的执行环境是什么耐?没错就是我们的客户端浏览器(IE,FF,Chrorme....)。之所以我们把它成为了称为前端(客户端)脚本语言,就是因为它的运行环境。终于有一天,有一个位和我一样热爱JavaScript的美国程序员Ryan Dahl(瑞恩达尔),他决定使用JavaScript做一些更加有意义的事情,给予JavaScript在开发中所处的新定位,使用JavaScript作为后端(服务器)编程语言来做开发,我的天,这个想法简直就是疯了(如同一只狗,有一天对着猫说:"我要开始抓老鼠了"。猫嘲讽的说道:"呵呵,就你,能行吗?")。“那么问题来了?真正的问题来”,当然这个问题并不是按照剧情一样问:"挖掘机技术哪家强?" Ryan Dahl可没有兴趣思考这样的问题。 要让JavaScript的作为后端(服务器)编程语言,那么必须就要先要脱离JavaScript目前的执行环境客户端浏览器。Ryan Dahl想到了一个好点子,使用Google Chrome开源浏览器JavaScript V8引擎为基础搭建了一个新的JavaScript执行环境(注意:这里说的只是使用的浏览器执行JavaScript的引擎,并非是我们使用浏览器客户端),并且在V8引擎中基础上添加了服务器编程语言应该有的功能,如文件系统,模块,包,操作系统API,网络通信等,由此一个新的平台产生名为NodeJs。

NodeJs = JavaScript执行环境+JavaScript扩展的功能。
简单理解NodeJs就是一个可以让JavaScript脱离浏览器还能执行的平台,并且这个平台对JavaScript功能进行了增强。

2.2.客户端编程语言和服务器编程语言

客户端编程语言是运行在客户端浏览器里面。 例如:html,css, javascript
服务器编程语言是运行在服务器上。 例如:java php .net nodejs


image.png

客户端编程语言用来实现浏览器页面特效。例如: 幻灯片,轮播

服务器编程语言用来实现网络支付,数据库操作,调用第三方应用。

2.3. 什么是NodeJs(官方)

Node.js 是一个基于 <u>Chrome V8</u>** 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器** <u>npm</u>,是全球最大的开源库生态系统。

2.4. NodeJs与JavaScript区别

很多人,分不清楚彼此之间的关系和区别,学习NodeJs之前我们先对他们进行质上的比对;

image.png

image.png

NodeJs :一个可以运行JavaScript的平台,基于Chrome JavaScript V8引擎,并且对ECMAScript语言进行了增强,使ECMAScript具有服务器语言开发的能力(操作文件,读取系统信息,网络等。。。);

JavaScript:一门编程语言,只要有ECMAScript引擎就能运行,各大浏览器都有自己的JavaScript引擎,并且如果ECMAScript运行在浏览器中,浏览器对ECMAScript加入了浏览器和文档操作的接口(方法);

简单理解:JavaScript运行需要JavaScript引擎,JavaScript引擎可以在浏览器(IE、Firefox、Chrome)中,也可以独立出来(NodeJs),运行在浏览器中的JavaScript,为客户端JavaScript,而NodeJs称为服务端JavaScript。 JavaScript运行在不同的平台,责任也不一样,浏览器中JavaScript主要是操作BOM和DOM,而NodeJs则是具有服务端语言处理能力(处理网络请求,保存数据到数据库);

注意:NodeJs平台与浏览器平台中运行的JavaScript,在两个不同的平台,平台各自运行自己的代码互不干扰。

客户端JavaScript


image.png

NodeJs JavaScript


image.png

2.5. 为什么学NodeJs

1、前后端语言统一(JavaScript 理想状态);

2、前后端分离(淘宝架构);

3、前端开发工具很多都基于Node,只有会Node,使用起来才能得心应手;

4、社区活跃,上千个成熟模块供我们选择使用;

5、上手快,开发简单;

6、Node.JS薪资高,人才少;

7、前端开发,必备技能;

8、源代码教育Web高级前端必学;

9、自己可以做私单.前端后端自己拦(全栈开发工程师);

2.6. NodeJs用在哪里?

1、网站(如express/koa等)

2、im即时聊天(<u>socket.io</u>)

3、api(移动端,pc,h5)

4、http proxy(淘宝首页)

5、前端构建工具(grunt/gulp/bower/webpack/fis3…)

6、写操作系统(NodeOS)

7、跨平台打包工具(以前叫Node-WebKit现在叫nw.js)

8、命令行工具(比如cordova)

2.7. 哪些公司在应用Node****Js

国外的公司 Yahoo, Paypal, eBay等还有很多的中小型公司,国内的公司如雪球、淘宝、网易、百度等也都有很多项目运行在<u>Node.</u><u>js</u>之上。

3. NodeJs准备工作

3.1. 官方网站

英文:<u>https://nodejs.org/en/</u>

中文:<u>http://nodejs.cn/</u>

中文文档:<u>http://nodejs.cn/api/</u>

菜鸟文档:<u>http://www.runoob.com/nodejs/nodejs-tutorial.html</u>

3.2. 下载NodeJs

点击“下载”(Download)下载你的电脑操作系统对应的NodeJs版本;

Windows 系统选择.msi; 目前已被都是64位操作系统,极少数是32位;

Mac 系统选择.pkg;

中文地址:<u>http://nodejs.cn/download/</u>

image.png

英文地址:<u>https://nodejs.org/en/download/</u>
image.png

3.3.安装NodeJs

Windows系统下,选择和系统版本匹配的.msi后缀的安`装文件。Mac OS X系统
下,选择.pkg后缀的安装文件。默认安装即可。

3.4.DOS命令

3.4.1.什么是DOS系统

使用window系统有两种方式:
可视化的界面(窗口),
DOS系统

DOS命令是windows系统中自带的命令行操作系统.

进入命令行: win+R 在运行框中输入 cmd 再回车

e:  切换盘符(切换到E盘)
    e:
    
cd  进入指定的文件夹
    cd 文件夹名 进入指定的目录
    cd ./       进入当前目录(省略不写)
    cd ../      进入上一级目录
    cd /        进入根目录
    
dir 显示当前文件夹中的文件和目录列表
cls 清除屏幕

ctrl+c 中断执行
3.4.2.命令行的两种模式
第一种: DOS系统模式 , 只能够运行DOS命令

(c: cd dir cls ...)
标识: C:\user\administrator

第二种: node模式: 只能运行JS代码
    标识: >

从 DOS模式切换到 Node模式:
命令: node 回车

从Node模式切换到DOS模式:
    命令: .exit
    快捷键: ctrl+c 按多次

3.5.运行NodeJs

3.5.1.REPL方式运行

NodeJs提供了REPL模式(cmd命令行)( Read-Evaluate-Print-Loop,输入 -求值 -输出 -循环),即交互式命令行解析器),可以直接在命令行,编写NodeJs代码,适合检验和学习nodejs。

win键(田字符)+R(运行命令框),输入cmd


image.png

输入:node+回车;
输入:js代码+回车,查询运行效果;


image.png
3.5.2.js文件方式

1、新建一个js文件,然后编写简单的js代码

hello.js

function hello(){
  console.log(“hello”);
}
hello();

2、命令行运行
//首先让命令行导向到执行文件的目录下面. cd E:\WEB前端\NodeJs\DAY01\code


image.png

node hello

3、webstorm控制台运行


image.png

4、webstrom快捷键运行node.js
Alt+Shfit+F10


image.png

image.png

4.CommonJs规范(了解)

JavaScript是一个强大面向对象语言,它有很多快速高效的解释器。官方JavaScript标准定义的API是为了构建基于浏览器的应用程序。然而,并没有定义一个用于更广泛的应用程序的标准库。

CommonJS API:不是一个语言,也不是一个平台,它只是一个标准(规范)。 它定义的标准主要是对ECMAScript标准API进行增强。

CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的ECMAScript解释器和不同的主机环境中。在兼容CommonJS的系统中,你可以使用JavaScript程序开发:

服务器端JavaScript应用程序
命令行工具(npm,webpack)
图形界面应用程序
混合应用程序(如,Titanium或Adobe AIR)

CommonJS是一种规范,NodeJS是这种规范的实现。
二进制:二进制(0,1)数据对象(字节数组和/或字符串)(建议、讨论、早期实现)
编码:编码和字符集(建议、讨论、早期实现) UTF-8,GBK, GBK2312, ISO-8859-1
io:I / O流(建议、讨论)
fs,fs基地:文件系统(建议、讨论、早期实现 file system
系统:系统接口(stdin、stdout,stderr,等等)(1.0,提出修正案)
断言,测试:单元测试(1.0,修正案提议未决)
套接字:套接字I / O TCP / IP套接字(早期的建议)
事件队列:反应堆反应堆/事件队列(早期的建议)
工人:工(并发无共享进程/线程)(建议)
控制台:控制台(建议)

简单理解:Commonjs是对ECMAScript的功能补充定义了规范(应新增那些功能),NodeJs是对CommonJs的实现(提供那些新功能)。

5.NodeJs模块基础

NodeJs采用模块方式来管理和组织代码,NodeJs的所有的功能都存在每个模块中。

5.1.什么是模块

模块:一个具有特定功能的文件就是一个模块,模块之间可能存在一定的依赖关系,使用模块可以很好的把这些依赖关系整合起来。比如jquery的幻灯片插件依赖与jquery核心模块。

5.2.为什么要使用模块

有了模块,我们就可以非常方便的使用这些模块,因为模块总是完成了特定功能,如果需要修改模块中的功能,那么需要修改这个自己的模块文件即可,模块独立与每一个文件中,不影响模块的代码。
[图片上传中...(image.png-431fca-1559390011999-0)]

5.3. 模块规范

目前有三种流行的模块规范,分别是AMD、CMD、Commonjs(NodeJs)

<u>http://blog.chinaunix.net/uid-26672038-id-4112229.html</u>

<u>http://www.zhihu.com/question/20351507/answer/14859415</u>

5.3.1. AMD

AMD, (Asynchronous Module Definition=异步模块定义),这种规范是异步的加载模块,requirejs应用了这一规范,适合客户端浏览器环境。

AMD规范定义了一个自由变量或者说是全局变量 define 的函数。

define( id?, dependencies?, factory );    

AMD规范  https://github.com/amdjs/amdjs-api/wiki/AMD

第一个参数 id 为字符串类型,表示了模块标识,为可选参数。若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。如果存在,那么模块标识必须为顶层的或者一个绝对的标识。

第二个参数,dependencies ,是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。

第三个参数,factory,是一个需要进行实例化的函数或者一个对象。
define("alpha", [ "require", "exports", "beta" ], function( require, exports, beta ){
    export.verb = function(){
        return beta.verb();
        // or:
        return require("beta").verb();
    }
});
5.3.2.CMD
CMD, (Common Module Definition), 是seajs推崇的规范,国内大牛玉伯之作。

define(factory);
factory,是一个需要进行实例化的函数或者一个对象。

define( function(require, exports, module) { 
    // 模块代码
});
5.3.3.Commonjs

CommonJS, 是诞生比较早的。NodeJS就采用了CommonJS的规范来定义模块。但是CommonJs采用的是同步加载文件方式,只适用于服务端(NodeJs平台)

虽然有三种规范,写法也不同,但是规范的最终目的都是为了功能的“模块化”,将某个功能和多个功能独立在一个文件中,后期方便我们使用这些功能,而且模块与模块之间的是独立的,互不影响。

5.3.4.模块特点

JS中的模块有共性,模块的功能代码都是在一个函数中。
1、模块中使用var定义变量都是局部变量。
2、模块定义在函数,也是局部。
3、模块有一个模块对象。包含moduleId(模块名)、exports(导出对象)
4、如果模块中需要暴露方法或属性给外部使用,那么就执行往exports对象上面添加。
5、使用一个模块用require(“moduleId”),该方法返回的是模块对象的exports对象。
var a = require(“./a.js”);
a.xxx // 等同于模块中exports.xxx.

5.4.自定义模块

一个JS文件就是一个模块,所以定义一个模块,只需要新建一个JS文件即可。

hello.js

function sayHi(){
  console.log(“hi”);
}

function sayHello(){
  console.log(“hello”);
}

虽然我们在js定义了两个方法,但是这个两个方法只能在当前模块中使用,因为模块是独立的(内部的变量和函数只能在该模块使用),所以我们可以使用模块内的exports对象(导出对象)输出模块中功能供外部使用。

hello.js

function sayHi(){
  console.log(“hi”);
}

function sayHello(){
  console.log(“hello”);
}

//非常重要,导出模块功能(供外部使用)
exports.sayHi = sayHi;
exports.sayHello= sayHello;

5.5.使用模块

一个模块,一旦定义完成后,我们就可以使用这些模块。首先,你需要编写一个新的文件(模块),来使用hello.js模块。

使用模块,通过require(“模块”);函数

main.js

//引入模块
var hello = require(“./hello.js”); // .js可以省略

//使用模块中的功能
hello.sayHi();
hello.sayHello();

node main.js

5.6.主模块

通过命令行参数传递给NodeJS以启动程序的模块被称为主模块。主模块负责调
度组成整个程序的其它模块完成工作。

6.NodeJs模块进阶(重点)

6.1.模块组成(重点中的重点)

一个文件就是一个模块,编写这个模块中的代码,实际上都写在一个函数中,这样就保证了局部变量,模块独立,不会对外部模块造成影响。


image.png

实际


image.png

并且这个函数在调用的时候,会传入5个参数require、exports、module、(__filename,__dirname)供定义模块使用。

6.2.require函数

require(moduleId)函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。

.是相对于当前目录,模块文件路径的js后缀可以省略
var foo1 = require('./foo'); //当前目录下面的foo.js文件
var foo2 = require('./foo.js');

被引入的模块分为三种
文件模块
自己编写的js,必须添加./
第三方模块
第三方开发的
npm install 包名
系统模块
不需要安装,不需要指定路径,直接引用
fs http url os

注意:
1)引入的文件没有导出内容的时候返回空对象
2)引入模块文件有语法错误时会报错
3)引入模块不存在时会报错
4)重复引入模块只执行一次
5)在require函数引入模块时,可以省略扩展名 .js .json .node 不写。
6)引入文件模块必须加上./, 原理是node具有自己的默认模块目录node_modules

6.3.exports导出对象

exports对象是当前模块的导出对象,用于导出模块公有方法和属性。别的模
块通过require函数使用当前模块时得到的就是当前模块的exports对象。
以下例子中导出了一个公有方法。
exports.hello = function () {
console.log('Hello World!');
};

注意:
1)exports 等同于 module.exports
2)exports是一个对象,可以对它添加属性和方法
3)真正导出的对象是module.exports,而不是exports,exports只是对方的一个引用。是可以进行修改的

6.4.module模块对象(重点中的重点)

module对象可以访问到当前模块的一些相关信息,但最多的用途是替换
当前模块的导出对象(module.exports={})。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。
module.exports = function () {
console.log('Hello World!');
};

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

注意:
1)可以直接使用 module.exports 导出属性、方法、类
module.exports =变量;

module.exports =构造函数;

6.5.exports和module.exports的区别

image.png

exports仅仅是引用了module.exports. 但是真正暴露的对象为module.exports对象

6.6.模块初始化

一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始
化模块的(exports)导出对象。之后,缓存起来的导出对象被重复利用。

6.7.模块导入(重点中的重点)

NodeJs共两种类型的模块:
1、核心模块(系统模块)
2、文件模块
3、第三方
不同类型的模块,导入模块时也有一些差异。

6.7.1. 核心模块

核心模块,是由NodeJs平台提供的模块,也可以称为“系统模块”。

导入核心模块的规则:不以.../开始的标识符。

6.7.2. 文件模块

.../开始的标识符,这里都被当做文件模块来处理。var hello = require(“./hello”);

var fs = require(“fs”); //fs模块提供文件相关功能

6.7.3. node_modules文件夹

node_modules文件夹在nodejs中是一个特殊的文件夹,通过它的名字就可以看出,该文件夹也是用于存放node模块。

如果一个模块不是一个系统模块,也不是一个文件模块,那么就会在node_modules文件夹下进行操作。

console.log(module.paths);//node_modules会查找的目录。

image.png

Ø 当前文件目录下的node_modules目录。

Ø 父目录下的node_modules目录。

Ø 父目录的父目录下的node_modules目录。

Ø 沿路径向上逐级递归,直到根目录下的node_modules目录。

Ø 环境变量配置的全局模块目录中。

6.7.4. 模块后缀名

require()在分析标识符的过程中,会出现标识符中不包含文件扩展名的情况。CommonJS模规范也允许在标识符中不包含文件扩展名,这种情况下,Node会按js、json、node的次序补足扩展名,依次尝试。

简单理解:如果模块的后缀名为js、json、node那么可以不写。

6.8.

6.8.1. 什么是包?

JS模块的基本单位是单个JS文件,但复杂些的模块往往由多个子模块组成。为了便于管理和使用,我们可以把由多个子模块组成的大模块称做包,并把所有子模块放在同一个目录里

组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被

作为包的导出对象。

默认包中的入口模块为<u>index</u>.js,也可以在包中新建一个package.json包描述文件,设置main属性值为模块的入口。

package.json

{

  main:”./hello.js” //模块的入口

}

Package.json包描述文件

6.8.2. Package.json 属性说明
name - 包名。

version - 包的版本号。

description - 包的描述。

homepage - 包的官网 url 。

author - 包的作者姓名。

contributors - 包的其他贡献者姓名。

dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。(模块也会依赖其他模块。)

repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上(代码仓库 , git,svn版本控制工具)。

main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。

keywords - 关键字,发布到npm后,供其他人搜索。

6.8.3. 创建包描述文件的命令

npm init 命令,帮助我们创建一个package.json

6.8.4创建模块模拟

创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) runoob                   # 模块名
version: (1.0.0) 
description: Node.js 测试模块(www.runoob.com)  # 描述
entry point: (index.js) 
test command: make test
git repository: https://github.com/runoob/runoob.git  # Github 地址
keywords: 
author: 
license: (ISC) 
About to write to ……/node_modules/package.json:      # 生成地址

{
  "name": "runoob",
  "version": "1.0.0",
  "description": "Node.js 测试模块(www.runoob.com)",
  ……
}

Is this ok? (yes) yes
以上的信息,你需要根据你自己的情况输入。在最后输入 "yes" 后会生成 package.json 文件。

7. NPM(重点)

Nodejs社区非常的热闹,众多的优秀开发者的提供了很多功能强大的模块,供我们选择使用,使用这些模块就需要用到NPM。

https://www.npmjs.com/

Npm(Node Package Manager): Node包(模块)管理工具,借助NPM,可以帮助用户快速安装和管理依赖包,这样我们就可以很方便的使用来自全球Node开发者提供的包了。

7.1. Npm 安装包(重点中的重点)

npm 安装 Node.js 模块语法格式如下:

npm install <Module Name>

以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

npm install express

安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。

var express = require('express');

全局安装与本地安装

npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如:
npm install express # 本地安装
npm install express -g # 全局安装

本地安装

1\. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。

2\. 可以通过 require() 来引入本地安装的包名。

全局安装

1\. linux将安装包放在 /usr/local 下或者你 node 的安装目录。window:C:\Users

2\. 可以直接在命令行里使用。

在工作中如何选择?

尽量采用全局安装.

7.1.1 * 在CMD中检查是否安装完成

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

$ npm -v
2.3.0

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

$ sudo npm install npm -g
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.14.2 /usr/local/lib/node_modules/npm

如果是 Window 系统使用以下命令即可:

npm install npm -g

7.2. Npm 常用命令

在cmd中npm的常用命令

 npm init  会引导你创建一个package.json文件,包括名称、版本、作者这些信息等

 npm install <name>安装nodejs的依赖包

 npm install <name> -g  将包安装到全局环境中

 npm install <name> --save  **安装的同时,将信息写入package.json中**

 npm remove <name>移除
     npm update <name>更新
     npm view <name> versions 查看可用版本

<name>是操作的模块名

npm install <name>安装nodejs的依赖包

注意:如果全局安装的包不能使用,就必须将全局安装目录加入到环境变量中。

NODE_PATH => C:\Users\admin\AppData\Roaming\npm\node_modules

7.3. CNPM

在我们中国,要下载 npm 包非常慢,如果使用 cnpm 下载包就非常快了。

CNPM是taobao提供的一个完整 npmjs.org 镜像,cnpm与npm的内容每10分钟会同步一次。

安装cnpm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

使用cnpm:

cnpm install <模块名>

8. 课程总结

8.1. 重点

  1. Node.js的安装与使用

  2. Node.js的模块

  3. 包管理工具npm

8.2. 难点

  1. 模块的编写与导出

8.3. 如何掌握?

  1. 此技能靠使用升级。

  2. 将常见的用法截图保存到文件夹中,时常回顾。

  3. 每天复习一遍,持续1个星期。

8.4. 排错技巧(技巧)

  1. console.log()方法。

9. 作业

作业难度****: ☆☆☆

1、什么是主模块?

2、定义一个模块,导出对象为函数。

module.exprots= 函数

3、编写一个模块,然后在主模块中使用。
xxx.js
main.js
require(‘./xxx.js’);

4、模块中定义的变量,是否可以在其他模块中使用? 为什么?

5、回家打开www.npmjs.org 随便找一个模块安装,并且简单使用。

<u>www.npmjs.org</u> : 第三方模块,众多的开发者编写,上传这个平台。

10. 面试题

  1. Node.js有没有了解过?

  2. 请简要说明Node.js的模块管理?

  3. Exports和module.exports的区别

11. 扩展知识或课外阅读推荐(可选****)

11.1. 扩展知识

11.2. 课外阅读

CommonJS规范 <u>http://javascript.ruanyifeng.com/nodejs/module.html</u>

NPM的详细命令 <u>http://www.cnblogs.com/PeunZhang/p/5553574.html</u>

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

推荐阅读更多精彩内容

  • 一、模块化简介 随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前...
    满天繁星_28c5阅读 536评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,057评论 2 58
  • 1 Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都着...
    zlx_2017阅读 1,203评论 0 1
  • 1 Node.js模块的实现# 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都...
    七寸知架构阅读 2,047评论 1 50
  • 第二十三天 聆听劝勉 我们在天上的爸爸,感谢你借着耶稣教导我们“有耳可听的,就应当听”(太11:15),求...
    麦子MELODYL阅读 113评论 0 1