香草JavaScript
import
它将始终构建成一个模块。但是,您可以使用
namespaces
沿着
"module": "system"
,然后可以将其输出到单个文件(或多个文件)。
因此,对于一个非常基本的项目,您将有以下几点:
{
"compilerOptions": {
"target": "es2016",
"module": "system",
"outFile": "./lib.js"
},
"include": [
"./**/*.ts"
]
}
接下来,您将创建如下所示的文件:
索引.ts
namespace MyNamespace {
// This is a private method that cannot be accessed in other files
// the reason for that is because it isn't exported.
function y() {
alert("test");
}
x(y)
}
功能.ts
namespace MyNamespace {
// This method can be referenced in other files because it is exported.
export function x(callback: () => void): void {
callback();
}
}
生成的浏览器代码
var MyNamespace;
(function(MyNamespace) {
function x(callback) {
callback();
}
MyNamespace.x = x;
})(MyNamespace || (MyNamespace = {}));
var MyNamespace;
(function(MyNamespace) {
function y() {
alert("test");
}
MyNamespace.x(y);
})(MyNamespace || (MyNamespace = {}));
MyNamespace.y()
MyNamespace.x(MyNamespace.y)
// etc.
使用requirejs
使用
进口
在您的项目中,您将需要一个第三方库
requirejs
"module": "amd"
.
tsconfig.json文件
{
"compilerOptions": {
"target": "es2016",
"module": "amd",
"outFile": "./lib.js"
},
"include": [
"./**/*.ts"
]
}
接下来,我们需要创建适当的typescript主文件:
requirejs(['functions'], function (util: any) {
function y() {
alert("test");
}
util.x(y)
})
因为它使用的是第三方库,所以它的初始化方式不同(使用
requirejs()
). 这告诉requirejs这是应用程序的入口点,因此只需要一次。
功能.ts
export function x(callback: () => void): void {
callback();
}
define("functions", ["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
function x(callback) {
callback();
}
exports.x = x;
});
requirejs(['functions'], function (util) {
function y() {
alert("test");
}
util.x(y);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.js"></script>
data-main
在script标签上,requirejs将自动加载文件。
<script data-main="./lib" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.js"></script>
This feature is still experimental, and not supported in all browsers
type="module"
脚本标记上的属性:
<script type="module" src="./path/to/main.js"></script>
tsconfig.json文件
target
和
module
outDir
注:
es2016
不是有效的模块类型。
{
"compilerOptions": {
"target": "es2016",
"module": "es2015",
"outDir": "./lib"
},
"include": [
"./**/*.ts"
]
}
索引.ts
注:
进口
.js
否则浏览器将无法加载它,除非您有适当的重写规则。
import { x } from './functions.js'
function y() {
alert("test");
}
x(y)
功能.ts
导出函数x(回调:()=>void):void{
回调();
}
这将输出与ts文件几乎相同的结果(Stackoverflow不支持外部js文件,除非它们托管在某个地方,所以这里没有代码段):
// index.js
import { x } from './functions.js';
function y() {
alert("test");
}
x(y);
// functions.js
export function x(callback) {
callback();
}