模块导入导出的方法

模块导入导出的方法

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  
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 慕课网@JoJozhai 老师 TypeScript入门课程分享 TypeScript入门 ES5,ES6,JS,...
    shangpudxd阅读 10,414评论 0 22
  • 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js...
    半世韶华忆阑珊阅读 649评论 0 0
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,716评论 2 17
  • 一块地不仅仅可以用来做博物馆或者修民宅,它还有好多其他用途:A、B、C、D、E。我们现在简化,说只有这两种用途:修...
    会成长的鱼阅读 2,630评论 1 2