【发布时间】:2021-11-25 12:35:56
【问题描述】:
我正在使用导入和导出,因为据说引用已过时。但是,我想编译成一个文件,并且我正在使用“系统”模块,但即使没有导出任何内容,它也会将所有内容都变成一个模块。如果导入了任何内容,则不执行代码,但如果没有导入或导出任何内容,则执行代码。我需要导入文件才能使用它们,但我不能,因为代码变成了模块函数。
这是我的 tsconfig.json:
{
"compilerOptions": {
"module": "system",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": false,
"outFile": "{PATH}"
}
}
我的 TypeScript 代码:
import { Button } from "UI/Button";
new Button("Hello World!");
console.log("HELLO!");
编译后的代码变成这样:
System.register("Main/main", ["UI/Button"], function (exports_4, context_4) {
"use strict";
var Button_1;
var __moduleName = context_4 && context_4.id;
return {
setters: [
function (Button_1_1) {
Button_1 = Button_1_1;
}
],
execute: function () {
new Button_1.Button("Hello World!");
console.log("HELLO!");
}
};
});
如果我删除导入并只保留 console.log:
console.log("HELLO!");
它会在没有导入的情况下删除所有内容,甚至是以前的模块,因为我猜它没有检测到它们正在被使用。
我假设我误解了导入/导出系统的工作原理?我希望能够运行函数和导入/导出文件,但到目前为止,我似乎只能导入/导出文件,而不能运行它们。我也希望将所有这些都编译到一个文件中。任何帮助将不胜感激!
【问题讨论】:
-
你在使用 webpack 吗?您需要通过在索引中执行
import { Button } from "UI/Button";来禁用 tree-shaking 或重新导出按钮。 -
@Win 我什至不确定 webpack 是什么。我只是想将我的 TypeScript 项目拆分为多个文件,然后将其编译为单个 .js 文件。我会研究一下 webpack 是什么,然后回复你。
-
你如何捆绑最终文件?你在用 ts-loader 吗?
-
@Win 我正在运行 TypeScript 编译器并在 HTML 页面中引用已编译的 .js 文件。我假设我错过了一步?
-
您应该能够在主
ts文件中将import { Button } from './Button';替换为export * from './Button';,它会像您期望的那样编译,因为这意味着您的意思是使 Button 在模块外可用
标签: typescript import module export