require
require引入的js文件相当于该js文件在一个 函数里面(argument.callee是function)执行的必须手动暴露才能访问变量
function (exports, require, module, __filename, __dirname) {
console.log(arguments.callee+"")
}
moudle:代表当前模块本身,exports就是moudel的属性
moudle.export === export ==> true
__filename: 文件的完整绝对路径
__dirname: 文件绝对路径到文件夹(文件目录)
暴露方式
exports.[name] = value
export.[name] = value
这里相当于暴露了一个对象 {x: ‘我是02….’}
module.exports 和 exports的异同
相同:
- 分别暴露的时候使用方式一致
差异:
- 统一暴露只能是使用module.exports = { } 的形式,因为引用的问题 ```javascript let obj = {} obj.a = {} let a = obj.a
因为暴露的是module.exports 所以直接修改exports是不起作用的
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12680222/1648285621123-28f08761-a80f-43bb-beab-978582da8d74.png#clientId=u3cfd3dc6-e034-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=188&id=u650741a6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=251&originWidth=796&originalType=binary&ratio=1&rotation=0&showTitle=false&size=193620&status=done&style=none&taskId=u03355d01-f26b-4f35-bf37-c20c860db60&title=&width=597)
<a name="wfTso"></a>
## 包管理
![image.png](https://cdn.nlark.com/yuque/0/2022/png/12680222/1648286849721-cfc8fe04-d83b-486e-bc52-e3ff5d892dfb.png#clientId=u3cfd3dc6-e034-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=379&id=ud9a923b6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=568&originWidth=873&originalType=binary&ratio=1&rotation=0&showTitle=false&size=282611&status=done&style=none&taskId=u2569e21e-c9f7-4339-857d-c26dc7b980b&title=&width=582)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/12680222/1648287872801-0217eff7-ca64-4fc5-aab8-154b57d52f16.png#clientId=u3cfd3dc6-e034-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=328&id=u7e8bb5f6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=437&originWidth=424&originalType=binary&ratio=1&rotation=0&showTitle=false&size=164011&status=done&style=none&taskId=ua22e9581-3fe0-4ad0-af98-0e9880e103b&title=&width=318)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/12680222/1648293614602-91210008-a08e-4baf-b585-ea2fe4ee61f0.png#clientId=u5ab4c8c7-1f82-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=309&id=u7d0dbffc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=464&originWidth=716&originalType=binary&ratio=1&rotation=0&showTitle=false&size=153105&status=done&style=none&taskId=u02b1ce5a-ef6f-4c67-8b07-26f97b0db8c&title=&width=477.3333333333333)
<a name="MLfKF"></a>
## 文件操作
<a name="ptGlY"></a>
### buffer
- 结构和数组很像,专门用来存储二进制数据
- node中直接使用
- 每一个元素都是二进制数据,显示以16进制显示**[ 00-ff : 八个0到八个1,一个字节 ]**
- buffer的大小一旦固定就不能改变大小
- 通过数组下标操作的时候要是超过了255的话就会取得末尾八个数
```javascript
let str = 'hello'
// Buffer.from(array)
let arr = Buffer.from(str)
console.log(arr.toString())
// buffer的所有构造函数都标记过时
let a = new Buffer(1024) // 创建一个1024 byte的buffer
// 新的代替方案
let a = Buffer.alloc(10)
console.log(a)
// 包含旧数据
let c = Buffer.allocUnsafe(size)
文件系统
- 通过node操作系统的文件
- 方法基本分为异步和同步
- fs.open(path[, flags[, mode]], callback) flags分为 r[只读] 和 w[可写] 要是同步的话返回文件描述符用于对文件的各种操作,异步用回调函数第一个参数是错误对象,第二个是文件描述符
- fs.write(fd, buffer[, offset[, length[, position]]], callback)
- fs.copyFileSync(src, dest[, mode])