在typescript库捆绑包中未找到静态导出
我在文件Style.ts中有一个类样式:在typescript库捆绑包中未找到静态导出,typescript,webpack,Typescript,Webpack,我在文件Style.ts中有一个类样式: export class Style { ... } 此类具有一些属性、一些方法和构造函数,以及其他类依赖项的几个导入语句。该类目前正通过标准es6导入语句被其他类使用: import { Style } from "../Theming/Style"; 如果我将此文件作为webpack的入口点,它会在捆绑包的末尾生成以下内容: /***/ 0: /*!*******************************************
export class Style
{
...
}
此类具有一些属性、一些方法和构造函数,以及其他类依赖项的几个导入语句。该类目前正通过标准es6导入语句被其他类使用:
import { Style } from "../Theming/Style";
如果我将此文件作为webpack的入口点,它会在捆绑包的末尾生成以下内容:
/***/ 0:
/*!***************************************************************!*\
/* ./src/Forms/Theming/Style ***!
\********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! ./src/Forms/Theming/Style
*/"./src/Forms/Theming/Style.ts");
并且样式类不会出现在包中。如果我不将此文件作为入口点,它将被完全忽略,即使它被作为入口点包含的另一个模块使用。另外,我给这个类作为一个例子,因为这是发生在几个文件,我目前不明白为什么
这是我的网页包配置文件:
module.exports = {
watch: false,
mode: "development",
devtool: false,
entry:
{
main: common.entryPoints
},
output:
{
path: __dirname + "/../dist",
filename: "forms-library.js",
library: "FormsLibrary",
libraryTarget: "umd"
},
module:
{
rules:
[
{ test: /\.ts$/, use: "ts-loader", exclude: "/node_modules/" }
]
},
resolve:
{
extensions: [ ".ts" ],
modules: [ "./src" ]
}
}
这是我的typescript配置:
{
"exclude": ["node_modules","dist", "build"],
"compilerOptions":
{
"lib": [ "es2015", "dom" ],
"sourceMap": false,
"target": "es5",
"module": "es6"
}
}
有人能告诉我为什么现在会这样吗?谢谢大家! 样式类仅由类型批注引用,因此在TypeScript编译器删除这些类型批注后,Webpack将正确地确定从运行时的入口点开始永远不会使用该类。如果向新样式添加实际调用。。。在某些地方,应该包括样式类。或者,如果它仅由库的客户端实例化,则需要从入口点重新导出它,以便客户端可以访问它。我不确定是否已经解决了此问题,但我发现自己也遇到了同样的问题,经过大量挖掘,我通过将libraryTarget包含在Web包配置的输出属性中修复了它:
// ...
output: {
path: root('./dist'),
filename: 'index.js',
libraryTarget: 'umd' // <-- this line
},
// ...
希望这有帮助 我尝试了这一点,当我将Style.ts列为入口点时,该类正确地包含在输出中。你能发布一个重现问题的存储库吗?嗨,Matt,当然,你可以在这里找到整个项目:配置文件中可能有差异,因为我一直在尝试修复问题啊,重新导出它修复了问题,谢谢Matt!我真的不明白为什么会发生这种情况,因为我使用import语句导入类,为什么不强制它导入模块?或者此Typescript正在尝试优化内容?Typescript将删除运行时未使用的导入。我想这是为了优化和/或避免来自后续工具的未使用导入的警告。我不知道确切原因,但我有一个react组件库从Typescript传输到Javascript,这解决了我的导入问题。非常感谢。