美文网首页
08.node入门之-模块化开发

08.node入门之-模块化开发

作者: 扁扁的汤圆 | 来源:发表于2018-12-10 22:56 被阅读0次

    1.模块的分类

    • 文件模块
      我们自己写的功能模块文件
    • 核心模块
      node平台自带的一套基本的功能模块,也称之为node平台的api
    • 第三方模块
      社区或第三方个人开发好的功能模块,可以直接拿回来用

    2.模块化开发的流程

    • 创建模块
      new calc.js
    • 导出成员
      module.exports = {}
    • 载入模板
      var calc = require('./calc.js')
    • 使用模块
      calc.add(1,2)

    3.模块内全局环境

    • __dirname
      用于获取当前文件所在目录的完整路径
    • __filename
      用来获取当前文件的完整路径
      以上在REPL环境无效
      module/module.js:
    //获取当前脚本所在路径
    console.log(__dirname);
    //文件路径
    console.log(__filename);
    

    test.js:

    const module1 = require('./module/module');//会进入到module/module.js执行里面的操作
    

    执行结果:

    $ node test
    D:\phpStudy\PHPTutorial\WWW\node\module
    D:\phpStudy\PHPTutorial\WWW\node\module\module.js
    

    在文件操作中,所有的路径必须是绝对路径(物理路径)
    错误示例:

    const fs = require('fs');
    fs.readFile('../log.txt',(error,content) => {
       if(error) throw error;
        console.log(content);
    });
    

    结果:

    $ node test
    D:\phpStudy\PHPTutorial\WWW\node\module\module.js:8
       if(error) throw error;
                 ^
    
    Error: ENOENT: no such file or directory, open 'D:\phpStudy\PHPTutorial\WWW\log.
    txt'
    

    正确:

    const fs = require('fs');
    //fs.readFile(__dirname+'/../log.txt','utf8',(error,content) => {//这种不需要toString()转换了
    fs.readFile(__dirname+'/../log.txt',(error,content) => {
       if(error) throw error;
        console.log(content.toString());
    });
    

    结果:

    $ node test
    海王
    
    • module-模块对象
      node内部提供一个Module构建函数,所有的模块都是Module的实例,属性如下:
      module.id模块的识别符,通常是带有绝对路径的模块文件名。
      module.filename模块定义的文件的绝对路径。
      module.loaded返回一个布尔值,表示是否已经完成加载。
      module.parent返回一个对象,表示该模块用到的其他模块(父级)。
      module.children返回一个数组,表示模块用到的其他模块(子级)。
      test.js:
    console.log(module);
    

    打印结果:

    $ node test
    Module {
      id: '.',
      exports: {},
      parent: null,
      filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\test.js',
      loaded: false,
      children: [],
      paths:
       [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
         'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
         'D:\\phpStudy\\PHPTutorial\\node_modules',
         'D:\\phpStudy\\node_modules',
         'D:\\node_modules' ] }
    

    如果将打印放在module.js中,在test.js引入它
    module.js:

    console.log(module);
    

    test.js:

    require('./module/module');
    

    结果:

    $ node test
    Module {
      id: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\module.js',
      exports: {},
      parent:
       Module {
         id: '.',
         exports: {},
         parent: null,
         filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\test.js',
         loaded: false,
         children: [ [Circular] ],
         paths:
          [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
            'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
            'D:\\phpStudy\\PHPTutorial\\node_modules',
            'D:\\phpStudy\\node_modules',
            'D:\\node_modules' ] },
      filename: 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\module.js',
      loaded: false,
      children: [],
      paths:
       [ 'D:\\phpStudy\\PHPTutorial\\WWW\\node\\module\\node_modules',
         'D:\\phpStudy\\PHPTutorial\\WWW\\node\\node_modules',
         'D:\\phpStudy\\PHPTutorial\\WWW\\node_modules',
         'D:\\phpStudy\\PHPTutorial\\node_modules',
         'D:\\phpStudy\\node_modules',
         'D:\\node_modules' ] }
    
    

    可以通过module.parent判断当前这个文件是否被别的文件加载
    module.js:

    if(module.parent){
        console.log('当前这个文件是被别的文件加载');
    }else{
        console.log('入口文件');
    }
    
    • exports
      映射到module.exports的别名,表示模块对外输出的值。

    4.模块的定义

    • 一个心的JS文件就是一个模块
    • 一个合格的模块应该是有导出成员的,否则模块就失去了定义的价值。
    • 模块内部是一个独立(封闭)的作用域(模块与模块之间不会冲突)。
    • 模块之间必须通过导出或导入的方式协同;
    • 导出方式:
      exports.name = value
      module.exports = {name : value}

    相关文章

      网友评论

          本文标题:08.node入门之-模块化开发

          本文链接:https://www.haomeiwen.com/subject/bpqjhqtx.html