美文网首页
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