本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-05-21
命名空间用来避免命名冲突;
// 定义
namespace app {
export namespace models {
export class UserModel {}
export class TalkModel {}
}
}
// 访问
var user = new app.models.UserModel();
// 可以包含点号
namespace app.models {
}
Node.js使用的是CommonJS
# 使用CommonJS 对应的module选项则还有amd umd system
tsc --module commonjs main.ts
但是在程序设计阶段只能选择外部模块语法 或 ES6模块语法;
// user.js
// 导出 export class User {}
class User {}
export { User };
// 或者使用别名 export { User as Usr }; User输出为Usr
// 导入
import { User } from './user';
应尽量避免使用这种语法而应使用ES6语法来代替,但是要简单看一下, 因为可能会处理一些老的程序或查看一些老的文档
// 导出
export class User {
}
// 或者
export = User;
// 导入
import User = require('./user');
/**
* @param1 { Array } 包含了依赖的模块名列表
* @param1 { Callback } 回调,将在所有的依赖全部加载完成是执行,将所有依赖的模块作为它的参数
*/
define(['require', 'exports'], function(require, exports) {
function User() {
// ...
}
return User;
})
AMD模块可以被RequireJS模块加载器加载,浏览器端一般采用AMD;
// 导出
function User() {
// ...
}
module.exports = User;
// 导入
const user = require('./user');
// 或使用 import
import User = require('./user');
可以使用 --compile commonjs
将使用外部模块语法的代码编译为使用commonjs
当在浏览器中使用require关键时,会抛出异常,因为require未定义,可以使用 Browserify 解决这个问题;
# 安装依赖
npm i -g browserify
# 使用
browserify main.js -o bundle.js
通用模块定义:
(function (root, factory) {
if (typeof exports === 'object') {
// CommonJS
module.exports = factory(require('b'));
} else if (typeof define === 'function' && define.amd) {
// AMD
define(['b'], function (b) {
return (root.returnExportsGlobal = factory(b))
})
} else {
// 全局变量
root.returnExportsGlobal = factory(root.b)
}
} (this, function(b) { // this 就是 root, 这个匿名函数就是 factory
// 真正的模块
return {};
}))
可以使用--compile umd
为程序中的每一个模块生成一个umd模块,或使用 Browserify。
如同UMD为你提供了一种生成一个模块即兼容 AMD 又兼容 CommonJS的方式,SystemJS 可以让你在不兼容ES6的浏览器上,更加贴近它们语义地使用ES6模块定义方式。