js解析和异步
js一直是单线程的 , 宿主环境(浏览器node环境)是多线程 , 宿主环境 开启子线程
js 无限去执行从任务队列提取任务放到主线程执行
commonjs规范
require
module
exports
全局作用域 和 模块作用域(私有作用域)
全局作用域 : global
模块作用域(私有作用域): 每一个单独的js文件是一个单独的模块, 每个模块定义的变量或者方法,默认只能在自己的模块中使用,即便是别的js文件请求了当前的模块 ,也是无法访问到的
虽然使用global.属性 global.方法 在别的模块中也可以访问到, 不推荐此方式 , 变量污染
模块单独暴露成员exports和module.exports
exports 和 module.exports 是一个对象 可以直接往exports上挂载成员(属性,方法) 在别的模块中导入当前的模块,就可以访问到当前模块的属性和方法了
exports 和 module.exports指向的是同一个空对象 它们俩全等的
两者都可以向外暴露成员
exports 和 module.exports 同时向外暴露成员 始终读取的是 module.exports 向外暴露的成员 以后开发使用 module.exports向外暴露成员
模块三大分类
核心模块 node自带的模块 fs path http
第三方模块 bootstrap jquery
用户自定义模块 js文件
自定义calc包
打开包的png 图
package.json || npm init -y 创建出一个package.json 文件
创建 lib test bin 等文件夹
在lib中创建自己的模块 注意各个模块的暴露
// 加法模块
function add(x, y) {
return x + y
}
module.exports = add
-------
// 减法模块
function sub(x, y) {
return x - y
}
module.exports = sub
------------------------
// 乘法模块
function mut(x, y) {
return x * y
}
---------------------------------
module.exports = mut
// 除法模块
function div(x, y) {
return x / y
}
module.exports = div
配置package.json中的 main 属性的 对应的主入口文件
{
"name": "calc",
"version": "1.0.0",
"description": "",
"main": "./lib/index.js" //主入口文件路径
}
创建主入口文件 导入 自定义模块并在主入口文件中暴露导入的自定义模块
const add = require('./add.js')
const sub = require('./sub.js')
const mut = require('./mut.js')
const div = require('./div.js')
// 暴露
module.exports = {
add,
sub,
mut,
div
}
使用方式
使用路径直接使用
如果要require(包名) 需要将包放到 node_modules 文件夹中 即可 |
|