Nodejs之什么是模块化
-
文件作用域
-
通信规则
-
加载 require
-
导出
-
2. CommonJS 模块规范
在 Node 中的 JavaScript 还有一个很重要的概念:模块系统
- 模块作用域
- 使用 require 方法用来加载模块
- 使用 exports 接口对象用来导出模块中的成员
3. 加载 require
语法:
var 自定义变量名称=require(‘模块‘)
两个作用:
-
执行被加载模块中的代码
-
得到被加载模块中的
exports导出接口对象
4. 导出 exports
-
Node 中是模块作用域,默认文件中所有的成员只在当前文件模块有效
-
对于希望可以被其它模块访问的成员,我们就需要把这些公开成员都挂载到
exports接口对象中就可以了导出多个成员(必须在对象中):
exports.a=123
exports.b=‘hello‘
exports.c=function(){
console.log(‘ccc‘)
}
exports.d={
foo:‘bar‘
}导出单个成员(拿到的就是:函数,字符串):
module.exports=‘hello‘以下情况会覆盖:
module.exports=‘hello‘
?
//以这个为准,后者会覆盖前者
module.exports= function (x,y){
return x+y
}也可以这样来导出多个成员:
module.exports={
add:function(){
return x+y
},
str:‘hello‘
}
5.原理解析
exports 和 module.exports 的引用
console.log(exports===module.exports)//=>true
?
exports.foo=‘bar‘
?
// 等价于
module.exports.foo=‘bar‘
exports 和 module.exports 的区别
-
每个模块中都有一个
module对象 -
module 对象中有一个
exports对象 -
我们可以把需要导出的成员都挂载到
module.exports接口对象中 -
也就是:
module.exports.xxx=xxx的方式,但是每次都module.exports.xxx=xxx很麻烦,点儿太多了 -
所以 Node 为了你方便。同时在每一个模块中都提供了一个成员叫:
exports -
exports===module.exports结果为true -
当一个模块需要导出单个成员的时候,这个时候必须使用
module.exports=xxx的方式 -
不要使用
exports=xxx不管用 -
因为每个模块最终向外return 的是
module.exports -
而 exports只是
module.exports的一个引用 -
所以即便你为
exports=xx重新赋值,也不会影响module.exports -
但是有一种赋值方式比较特殊
exports=module.exports这个用来重新建立引用关系的
require 方法加载规则
-
核心模块
-
模块名
-
-
第三方模块
-
模块名
-
-
用户自己写的
-
路径
-
-
优先从缓存加载
-
判断模块标识
-
核心模块
-
第三方模块
-
自己写的模块
npm
-
node package manager
package.json
我们建议每一个项目都要有一个
package.json文件(包描述文件,就像产品说明书一样)给人踏实的感觉。这个文件可以通过
npm init的方式来自动初始化出来。?
{
"name": "npm-demo",
"version": "1.0.0",
"description": "这是一个测试项目",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "liyouhong",
"license": "ISC",
"dependencies": {
"art-template": "^4.13.2"
}
}
?
Is this OK? (yes) yes
?对于咱们目前来讲,最有用的是那个 dependencies 选项,可以用来帮我们保存第三方包的依赖信息。
如果你的 node_modules 删除了也不用担心,我们只需要,npm install 就会自动把 package.json 中的 dependencies 中所有的依赖项都下载回来。
-
建议每个项目的根目录下都有一个 package.json 文件
-
建议执行 npm install 包名的 时候都加上 --save 这个选项,目的是用来保存依赖项信息
-
-
原文:https://www.cnblogs.com/SummerWithYou/p/15154629.html