【发布时间】:2020-03-07 12:54:51
【问题描述】:
我正在尝试在 typescript 中构建一个 npm 包。
我无法要求和使用 typescript 模块中导出的默认函数。我尝试将tsconfig.json 中的模块选项更改为UMD 和AMD,但没有成功。
//index.ts
export default function () {
console.log("greet");
}
export function greet2() {
console.log("greet2");
}
//tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonJS",
"declaration": true,
"outDir": "./lib",
"strict": true
}
}
//index.js
const greet = require("./lib/index");
greet();
greet.greet2();
//console
greet();
^
TypeError: greet is not a function
Webpack 可以用于解决方案,但我想知道是否有任何方法可以不使用 Webpack。
【问题讨论】:
-
你的 webpack 将所有的 js 文件编译成压缩包文件。
index.js等单独的文件不会直接添加到此文件中。它们可能有一些不同的名称,带有从 webpack 对象获取的系统前缀。这意味着您的 ts 模块被封装在包对象中,并且假设仅在此命名空间内使用。 -
很抱歉我现在没有使用webpack,我想知道是否有任何解决方案只使用tsc而不使用webpack。
-
在这种情况下,您需要额外的库来读取
require方法并手动将所有已编译的 js 脚本添加到您的网页。这是一种有点复杂和不寻常的方式,但有时可能很有用。 -
猜猜我会需要 webpack。谢谢你。我确实在这里找到了解决方案stackoverflow.com/questions/56402067/… 但如果我这样做,我将无法进行命名导出。
标签: javascript typescript commonjs