首页 > Web开发 > 详细

Nodejs之什么是模块化

时间:2021-08-18 10:31:23      阅读:24      评论:0      收藏:0      [点我收藏+]

1. 什么是模块化

  • 文件作用域

  • 通信规则

    • 加载 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 的区别

  1. 每个模块中都有一个 module 对象

  2. module 对象中有一个 exports对象

  3. 我们可以把需要导出的成员都挂载到 module.exports 接口对象中

  4. 也就是:module.exports.xxx=xxx的方式,但是每次都module.exports.xxx=xxx很麻烦,点儿太多了

  5. 所以 Node 为了你方便。同时在每一个模块中都提供了一个成员叫:exports

  6. exports===module.exports 结果为true

  7. 当一个模块需要导出单个成员的时候,这个时候必须使用 module.exports=xxx 的方式

  8. 不要使用 exports=xxx不管用

  9. 因为每个模块最终向外return 的是 module.exports

  10. 而 exports只是 module.exports 的一个引用

  11. 所以即便你为 exports=xx 重新赋值,也不会影响 module.exports

  12. 但是有一种赋值方式比较特殊 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 这个选项,目的是用来保存依赖项信息

    •  

     

     

 

Nodejs之什么是模块化

原文:https://www.cnblogs.com/SummerWithYou/p/15154629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!