js中的模块

本文主要汇总开发中后端、语言,遇到的小问题以及对小问题的研究

require

node使js可以运行于后台,于是就有了对模块的需要。
require的解决方式是将模块中的所有对象(变量、函数、类)都成为一个对象module.exports对象的子对象,然后在其他模块中直接通过require模块名来引用导出的molule.exports对象,来直接访问。
使用:

test.js

module.exports = { 
    a : function(){},
    b : 'test'
 }
var t = require('./test');
t.a();

AMD与CMD

require在服务端优势明显,因为加载的模块在服务器硬盘上,而在浏览器端确需要等待网络传输,加载完成后才可以使用模块中的对象,这种同步方式不符合js异步的理念,于是就有了AMD与CMD两种异步加载方式。
AMD: Asynchronous Module Definition
CMD: Common Module Definition
AMD是将对依赖加载模块部分都放到异步函数中完成

math.js

define(['Lib'], function(Lib){
    function foo(){
      Lib.doSomething();
    }
    return {
      foo : foo
    };
  });
  require(['math'], function (math) {
       math.add(2, 3);
  });

ES6的import

ES6应该也是一种异步加载方式,具体原理没有深入了解
它是通过解构的方式来导入、到处,这样就可以不用引用所有对象。另外有一个default语法糖,每个模块都有只一个default,这样在import时可以不写解构的过程。
与default语法糖相关的是as关键字,像是SQL的as,起一个别名,default就是这个别名。
export还是的到处可以放在每个对象上定义,而不是放在一个exports对象里。

```
export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export default expression;

import { member } from "module-name";
import { member as alias } from "module-name";
import defaultMember from "module-name"
```

module 与 namespace

下边先来看看Namespace 与 Modules

原文:namespace
开篇的Note:ES2015开始,internal moludes = namespaces, external modules 是modules

  • namespace
    namespace是一个在全局命名空间里的对象而已,只不过这个对象定义在多个文件中,通过使用 --outFile 连接在一起。

  • modules
    与namespace一样,mudule也是既可以包括代码跟声明,最大的区别是modules声明了了依赖。
    modules依赖与module loader(如 CommonJs/Require.js),使其更适应于大应用,Module提供更好的代码复用、更强的隔离。

    编译器会先去找.ts, .tsx然后 .d.ts, 如果都没有,就去找 module声明。
    myModules.d.ts

     declare module "SomeModule" {
      export function fn(): string;
     }
    

    myOtherModule.ts

    import * as m from "SomeModule
    
  • socket.io的引入
    在index.d.ts中,

    先定义了SocketIO对象,它是一个SocketIOStatic的类型
    export = SocketIO ,这块就有点费解, 私下任务,可能就是requrie的modules那种形式。

    然后再 export as namespace SocketIO,还是不太明了,因为一个变量与一个namespace是重名的,下面也有对 declare namespace SocketIO

    最奇怪的是这个index.d.ts中,全是声明,没有一个实现,这中lib如何使用?

引用

彻底搞清楚javascript中的require、import和export

Node中没搞明白require和import,你会被坑的很惨

# 语言 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×