文件作用域
通信规则
加载 require
导出
在 Node 中的 JavaScript 还有一个很重要的概念:模块系统
- 模块作用域
- 使用 require 方法用来加载模块
- 使用 exports 接口对象用来导出模块中的成员
require
语法:
var 自定义变量名称=require(‘模块‘)
两个作用:
执行被加载模块中的代码
得到被加载模块中的exports
导出接口对象
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‘
}
exports 和 module.exports
的引用
console.log(exports===module.exports)//=>true
?
exports.foo=‘bar‘
?
// 等价于
module.exports.foo=‘bar‘
每个模块中都有一个 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
这个用来重新建立引用关系的
核心模块
模块名
第三方模块
模块名
用户自己写的
路径
优先从缓存加载
判断模块标识
核心模块
第三方模块
自己写的模块
node package manager
我们建议每一个项目都要有一个 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