一、前言                                                                                        

这篇文章主要涉及:

1、模块中exprots和module.exprots

2、require加载标识符分析

3、npm常用指令总结

二、主要内容                                                                                          

1、 exprots和module.exprots

(1)在node中,每个模块内部都有一个自己的module对象, 而字module中,也有一个对象叫:exprots也是一个对象

比如:

(2)如果需要对外导出对象,只要把导出的成员挂载到module.exports中,,如果每次访问都要通过module.exports.xxx=xxxx  所以有如下:

(3)当一个模块需要导出单个成员的时候,直接exports=xxx 是不管用的

(4)对象最终返回的还是module.exports,,所以给exprots赋值是不管用的

比如:

(5)exprots=module.exprots会重新建立引用

2、require标识符分析

    (1)优先从缓存加载

比如有如下三个文件:

加载关系如图所示:

结果如图所示:优先从缓存中加载,所以a中已经加载了b,main中又加载b,会直接从缓存中加载

(2)模块标识

路径形式: ./  ../不可以省略    /xxx标识当前文件模块所在的磁盘根目录(几乎不用) 绝对路径也几乎不用

核心模块:核心模块文件已经被编译到了二进制文件中,我们只需按照名字来加载就可以

如: require('fs')  require('http')

第三方模块:第三方模块必须通过npm来下载,也用require来加载

不可能有任何一个第三方包和核心模块的名字是一样的

拿art-template来举例,看看是如何标识的:

第一步:加载的时候 先找到当前文件所处目录中的node_modules目录

第二步:找到node_modules/art-template

第三步:找到node_modules / art-template / package.json文件

第四步:找到package.json文件中的main属性,main属性中就记录了art-template的入口模块

第五步:做完前面几步,就加载使用第三方包,

如果package.json文件不存在或者mian指定的入口模块没有,则会自动去找该目录下的inde.js  index.js是一个默认备选项

  如果还找不到,就会找上一级目录中的node_modules目录查找,如果还没有,继续往上一级,一直到磁盘根目录,如果还没找到就报错:

                                                    can not find module xxxx

          3、npm

(1)

查看版本:npm –version

升级: npm: npm install –global npm

Npm init 生成  package  npm init –y 可以快速生成

Npm install 包名:只下载, 一次性将dependencies选项中的依赖项全部安装

Npm install –save 包名:下载并且保存依赖项  npm i –S

Npm uninstall 包名:只删除,如果有依赖项会依然保存

Npm uninstall –save 包名 :删除的同时会将依赖信息也去除

Npm help: 查看使用帮助

Npm 命令 –help

(2)由于npm加载的时候是访问的国外的网站,比较慢,这里可以用淘宝提供的cnpm镜像参考:http://npm.taobao.org

三、总结                                                                                          

node(基础三)_模块系统基础的更多相关文章

  1. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

  2. 初学Node(三)模块系统

    模块系统 Node根据CommonJS规范实现了一套自己的模块机制,可以使用require()导入一个模块,使用module.exports导出一个模块. require使用 在Node中我们可以使用 ...

  3. node.js的http模块的基础 学到的东西

    node.js的http模块的基础 学到的东西 其中客户端:我们在node.js中如果要请求服务端中的js或者其他脚本的话要使用http.request()方法他会返回http.ClientReque ...

  4. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  5. Django基础学习三_路由系统

    今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...

  6. 爬虫基础(三)-----selenium模块应用程序

    摆脱穷人思维 <三> :  培养"目标导向"的思维:  好项目永远比钱少,只要目标正确,钱总有办法解决. 一 selenium模块 什么是selenium?seleni ...

  7. Vue(基础三)_监听器与计算属性

    一.前言 本文主要涉及:     1.watch()监听单个属性 2.computed可以监听多个属性 3.点击li标签切换音乐案例 二.主要内容 1.watch()监听器(监听单一数据) (1)监听 ...

  8. python基础三---- time模块,函数的定义和调用

    此处重点说明一下: 注意: 1.用例之间不要存在依赖关系,每个用例都可以单独运行 2.用例不要互相调用,需要调用的公共方法可以写成方法去调用 1.等待 (在脚本运行的时候,有些线程之间需要间隔时间,可 ...

  9. node基础(二)_模块以及处理乱码问题

    一.前言 本次内容主要包括: 1.node.js中的模块系统 2.解决上篇中服务器响应的汉字乱码问题 二.知识 1.node中的模块   分为三种: 核心模块(node定义的如前面用到的fs,http ...

随机推荐

  1. INotifyPropertyChanged

    在WPF MVVM模式开发中,实现INotifyPropertyChanged的ViewModel是非常重要且常见的类: public class MainViewModel : INotifyPro ...

  2. word公式大小

    下面给出MathType与Word对应的字体关系,大家可以根据自己的实际需求,调整自己的公式大小.  MathType与Word对应的字体关系示例 以上给大家详细介绍了调整MathType公式字体大小 ...

  3. Build 2017 Revisited: .NET, XAML, Visual Studio

    For the next couple months we're going to revisit Build 2017, each post focusing on different aspect ...

  4. BZOJ1449[JSOI2009]球队收益&BZOJ2895球队预算——最小费用最大流

    题目描述 输入 输出 一个整数表示联盟里所有球队收益之和的最小值. 样例输入 3 3 1 0 2 1 1 1 10 1 0 1 3 3 1 2 2 3 3 1 样例输出 43 提示   要求总费用最低 ...

  5. 【XSY2190】Alice and Bob VI 树形DP 树剖

    题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...

  6. 【hjmmm网络流24题补全计划】

    本文食用方式 按ABC--分层叙述思路 可以看完一步有思路后自行思考 飞行员配对问题 题目链接 这可能是24题里最水的一道吧... 很显然分成两个集合 左外籍飞行员 右皇家飞行员 跑二分图最大匹配 输 ...

  7. 洛谷P4155 [SCOI2015]国旗计划(贪心,树形结构,基数排序)

    洛谷题目传送门 \(O(n)\)算法来啦! 复杂度优化的思路是建立在倍增思路的基础上的,看看楼上几位巨佬的描述吧. 首先数组倍长是一样的.倍增法对于快速找到\(j\)满足\(l_j+m\le r_i\ ...

  8. Hdoj 2045.不容易系列之(3)—— LELE的RPG难题 题解

    Problem Description 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole"(LELE的粉丝,即"可乐 ...

  9. 自学Python4.4-装饰器的进阶

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  10. 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)

    [BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...