美文网首页
模块导入导出的方法

模块导入导出的方法

作者: sunny519111 | 来源:发表于2017-07-02 20:29 被阅读176次

    模块导入导出的方法

    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  
      

    相关文章

      网友评论

          本文标题:模块导入导出的方法

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