模块导入导出的方法

模块导入导出的方法

1. CommonJS中的exports require module.exports

  • commonJS对于模块的定义分三部分,模块的导入,模块的导出,模块的标识

    • 模块的标识: require方法里面的参数。最好是小驼峰命令的。可以是./ ../等相对路径,也可以是绝对路径

    • 模块的导出:commonJS中module对象有一个exports方法,可以把文件作为一个模块导出。

       // module.exports 是导出函数
        module.exports =  function() {}   // 不可以
      // test.js
      exports.hello = 'world';
      // index.js
      var hello = require('./text')  //如果没有添加后缀名,node会默认添加.js .json .node
      console.log(hello);   //{hello : 'world'}
      
      // test1.js  同时使用module.exports exports 
      module.exports = { a: 'a'}
      exports.h = 'hh'  //如果同时使用module.exports和exports ,由于exports是module的一个属性,所以会被module.exports 覆盖
      // index.js 
      var re = require('./test1');
      console.log(re)  // {a :'a' }
      
      // test2.js 导出多个接口
      exports.str = 'hh'
      exports.obj = {name: 'hcc',age: 22}
      exports.fun = function(data) {console.log(data)};
      // index.js 
      var obj = require('./text2');
      console.log(obj)  //{ hello: 'world', obj: { hh: 'ff' }, bb: [Function] }
      
    • 模块的导入

      模块的导入分二个不同的模块 1. 核心模块 2. 自定义模块(文件的导出就是自定义)

      node自带一些核心模块,方便和操作系统进行互动

      常见的核心模块

      1. http 提供HTTP服务器功能
      2. fs 和文件系统交互
      3. path 处理文件目录
      4. querystring 解析URL的查询字符串
      // 核心模块和自定义模块的导入是不一样的。核心模块总是被优先加载的
      // 如果只有名称没有相对路径,默认会加载核心模块,所以一般加载自定义模块的时候添加相对路径。
      var http = require('http');
      console.log(http)  //它会导出一个http的对象
      const package = require('./package')  //如果有package.js就优先加载,没有的话就寻找package.json
      

      如果我们想导入一个文件夹呢? require会首先默认查看package.json中的main的入口文件,如果没有继续寻找index.js文件,如果都没有的话,就会报错

    2. ES6 的export 和 import 的模块导入导出

    ​ 由于node还不支持使用export import 导入导出,所以我们配置了webpack的编译环境

    • export导出包括默认导出和通过变量导出

    • import 对于使用不同的export和export default有2中情况

      // test.js 
      // 使用export的时候,需要配合变量,以便于import导入
      export var str = 'hcc'
      export var obj = {age: 22}
      export function fun(){console.log('fun')}  
      
      // index.js
      // 1.当使用export的时候,我们可以通过* 全部引用,但是* 不好使用,需要一个别名
      import * as obj from './test';
      console.log(obj);  {str: 'hcc', obj: {age: 22}, fun: funciton()....}
      // 可以使用ES6 解构赋值
      import {str,obj,fun} from './test'  // str="hcc"  obj={age:22}  fun=function..... 
      
      // 使用export default 就不需要使用变量名
      // test.js
      export default function(){
        console.log('export');
      }
      // index.js
      import fun from './test.js'
      console.log(fun);  // function() {console.log('fun')};
      
      // 使用export default 导出一个对象
      // test.js 
      export default {
        str: 'hcc',
        fun: function(){console.log(fun)};
        obj: {str: 1}
      }
      //index.js 
      import obj from './test.js'
      console.log(obj)  // 输出一个对象{str: "hcc", obj: {str: 1},fun:function....}  
      
      // 同时使用export和export default
      // test.js
      export function fun() {
        console.log('hh');
      }
      export var str = 'hcc';
      export var obj = {age: 22};
      export default {
        a: 1,
        fun: function(){
          console.log('fun')
        },
        obj: {str: 'hhhh'}
      }
      //index.js
      import default, {str, obj, fun} from './test.js';
      console.log(default);  // {...}
      console.log(str) // hcc
      console.log(obj) // {age: 22}
      console.log(fun) // function() {console.log('fun')}
      

    3. nodemon 模块可以更新npm script的命令

    1. 安装模块
    npm install --save-dev nodemon
    2. 使用
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "nodemon index.js",
    },
    npm start  // 会实时更新运行node index  
    

你可能感兴趣的:(模块导入导出的方法)