node(基础三)_模块系统基础
一、前言
这篇文章主要涉及:
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(基础三)_模块系统基础的更多相关文章
- C#_02.13_基础三_.NET类基础
C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...
- 初学Node(三)模块系统
模块系统 Node根据CommonJS规范实现了一套自己的模块机制,可以使用require()导入一个模块,使用module.exports导出一个模块. require使用 在Node中我们可以使用 ...
- node.js的http模块的基础 学到的东西
node.js的http模块的基础 学到的东西 其中客户端:我们在node.js中如果要请求服务端中的js或者其他脚本的话要使用http.request()方法他会返回http.ClientReque ...
- Node.js 教程 04 - 模块系统
前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- 爬虫基础(三)-----selenium模块应用程序
摆脱穷人思维 <三> : 培养"目标导向"的思维: 好项目永远比钱少,只要目标正确,钱总有办法解决. 一 selenium模块 什么是selenium?seleni ...
- Vue(基础三)_监听器与计算属性
一.前言 本文主要涉及: 1.watch()监听单个属性 2.computed可以监听多个属性 3.点击li标签切换音乐案例 二.主要内容 1.watch()监听器(监听单一数据) (1)监听 ...
- python基础三---- time模块,函数的定义和调用
此处重点说明一下: 注意: 1.用例之间不要存在依赖关系,每个用例都可以单独运行 2.用例不要互相调用,需要调用的公共方法可以写成方法去调用 1.等待 (在脚本运行的时候,有些线程之间需要间隔时间,可 ...
- node基础(二)_模块以及处理乱码问题
一.前言 本次内容主要包括: 1.node.js中的模块系统 2.解决上篇中服务器响应的汉字乱码问题 二.知识 1.node中的模块 分为三种: 核心模块(node定义的如前面用到的fs,http ...
随机推荐
- python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
- hibernate主配置文件中指定session与当前线程绑定
配置一条属性 <property name="hibernate.current_session_context_class">thread</property& ...
- MySQL数据库安装配置
1,下载MySQL 打开MySQL的官网www.mysql.com,发现有一个DOWNLOADS 点击它,进入到MySQL的下载页面,在页面的底部有一个MySQL Community Edition, ...
- h.264并行熵解码
在前面讨论并行解码的章节中,我们专注于讨论解码的宏块重建部分,甚至把宏块重建描述成宏块解码,这是因为在解码工作中,宏块重建确实占了相当大的比重,不过解码还包含其它的部分,按照解码流程可粗略分为: 读取 ...
- Spring 使用介绍(六)—— AOP(二)
一.切入点语法 1)通配符 AOP支持的通配符: *:匹配任何数量字符 ..:匹配任何数量字符的重复,在类型模式中匹配任何数量子包,在方法参数模式中匹配任何数量参数 +:匹配指定类型的子类型,仅能作为 ...
- maven+Spring+SpringMVC+Hibernate快速搭建
目录结构: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- Python入门-编写抓取网站图片的爬虫-正则表达式
//生命太短 我用Python! //Python真是让一直用c++的村里孩子长知识了! 这个仅仅是一个测试,成功抓取了某网站1000多张图片. 下一步要做一个大新闻 大工程 #config = ut ...
- King of Destruction HDU - 3002 && HDU - 3691(全局最小割)
求无向图的最小割 有没有源点都一样,不影响 #include <iostream> #include <cstdio> #include <sstream> #in ...
- 【XSY1529】小Q与进位制 分治 FFT
题目大意 小Q发明了一种进位制,每一位的变化范围是\(0\)~\(b_i-1\),给你一个这种进位制下的整数\(a\),问你有多少非负整数小于\(a\).结果以十进制表示. \(n\leq 1 ...
- 【原创】POJ 3259 Wormholes(Bellman-Ford) && 简介Bellman-Ford算法
[原创] 题目大意 John有N个农场,一共有M条边,在农场上出现了W个虫洞(W是一条边),其中M是双向普通边,W是单向虫洞边.John穿行于农场之间每经过一条边(S到E)的时间为+T,每经过虫洞会时 ...