image.png

require

require引入的js文件相当于该js文件在一个 函数里面(argument.callee是function)执行的必须手动暴露才能访问变量

  1. function (exports, require, module, __filename, __dirname) {
  2. console.log(arguments.callee+"")
  3. }
  4. moudle:代表当前模块本身,exports就是moudel的属性
  5. moudle.export === export ==> true
  6. __filename 文件的完整绝对路径
  7. __dirname 文件绝对路径到文件夹(文件目录)

暴露方式

exports.[name] = value

image.png
image.png
export.[name] = value
这里相当于暴露了一个对象 {x: ‘我是02….’}

module.exports 和 exports的异同

相同:

  1. 分别暴露的时候使用方式一致

差异:

  1. 统一暴露只能是使用module.exports = { } 的形式,因为引用的问题 ```javascript let obj = {} obj.a = {} let a = obj.a

因为暴露的是module.exports 所以直接修改exports是不起作用的

  1. ![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)
  2. <a name="wfTso"></a>
  3. ## 包管理
  4. ![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)
  5. <a name="MLfKF"></a>
  6. ## 文件操作
  7. <a name="ptGlY"></a>
  8. ### buffer
  9. - 结构和数组很像,专门用来存储二进制数据
  10. - node中直接使用
  11. - 每一个元素都是二进制数据,显示以16进制显示**[ 00-ff : 八个0到八个1,一个字节 ]**
  12. - buffer的大小一旦固定就不能改变大小
  13. - 通过数组下标操作的时候要是超过了255的话就会取得末尾八个数
  14. ```javascript
  15. let str = 'hello'
  16. // Buffer.from(array)
  17. let arr = Buffer.from(str)
  18. console.log(arr.toString())
  19. // buffer的所有构造函数都标记过时
  20. let a = new Buffer(1024) // 创建一个1024 byte的buffer
  21. // 新的代替方案
  22. let a = Buffer.alloc(10)
  23. console.log(a)
  24. // 包含旧数据
  25. 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])

简单文件写入
image.png
image.png

流式文件写入

image.png
image.png
image.pngimage.png