Tho*_*aud 0 typescript webpack ts-loader
我有这个档案
routing.ts
class RouteConfig {
// Some implementation
}
Run Code Online (Sandbox Code Playgroud)
我这样使用
app.module.ts
angular.module("ApplicationsApp", [
"ApplicationsApp.Services",
"ApplicationsApp.Clients",
"ApplicationsApp.Application"])
.config(RouteConfig);
Run Code Online (Sandbox Code Playgroud)
然后,我使用导入两个先前的文件
索引
import "./scripts/routing.ts";
import "./scripts/app.module.ts"";
Run Code Online (Sandbox Code Playgroud)
我正在使用webpack
and ts-loader
并且index.ts
是入口点之一。构建成功,但是当我运行它时,出现此错误
app.module.ts:5 Uncaught ReferenceError: RouteConfig is not defined
at Object.<anonymous> (app.module.ts:5)
at __webpack_require__ (bootstrap 755a82fd7c11e301b6c1:676)
at fn (bootstrap 755a82fd7c11e301b6c1:87)
at Object.<anonymous> (index.ts:4)
at __webpack_require__ (bootstrap 755a82fd7c11e301b6c1:676)
at fn (bootstrap 755a82fd7c11e301b6c1:87)
at Object.defineProperty.value (events.js:302)
at __webpack_require__ (bootstrap 755a82fd7c11e301b6c1:676)
at logLevel (bootstrap 755a82fd7c11e301b6c1:722)
at main.min.js:726
Run Code Online (Sandbox Code Playgroud)
我给的配置ts-loader
看起来像
{
configFile: paths.resolveOwn('config/tsconfig.json'),
compilerOptions: {
target: 'ES5',
module: 'commonjs',
moduleResolution: 'node',
sourceMap: true,
strict: true,
typeRoots: [
paths.resolveOwn('node_modules/@types'),
paths.resolveApp('node_modules/@types')
]
}
}
Run Code Online (Sandbox Code Playgroud)
你知道我在做什么错吗?我查看了几乎所有tsconfig.json
选项,但找不到能解决我的问题的选项
在routing.ts
你没有任何export
既不是import
:为打字稿,这是一个脚本。但是您使用了Webpack,并且使用了import
它:对于Webpack,routing.ts
是一个模块。在编译时,该类RouteConfig
可以全局访问,并且您的程序可以编译。但是,在运行时,RouteConfig
无法全局访问该类。
routing.js
作为脚本加载您可以routing.ts
在一个单独的文件中进行编译routing.js
。然后,在HTML代码中,必须从单独的tag加载已编译的文件<script src="scripts/routing.js">
。
在此解决方案中,请勿使用Webpack捆绑的模块中import
的文件routing.ts
。只要确保tsconfig.json
其中可以被TypeScript编译器访问。
RouteConfig
为全局变量您可以这样做:
// routing.ts
class RouteConfig {
// Some implementation
}
window["RouteConfig"] = RouteConfig;
Run Code Online (Sandbox Code Playgroud)
然后,在index.ts
您导入routing.ts
。
// index.ts
import "./scripts/routing.ts";
Run Code Online (Sandbox Code Playgroud)
结果,Webpack确保routing.ts
执行。并且您的全局变量在运行时变得可访问。
注意:此解决方案基于误解。对于Webpack以及在运行时,routing.ts
不是一个script
而是一个声明全局变量的模块。对于TypeScript(在编译时),它是一个以古怪且不受管的东西结尾的脚本window
。
以ES6方式,请勿创建任何全局变量。所有代码都在模块中。首先,您必须导出类:
// routing.ts
export default class RouteConfig {
// Some implementation
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以导入它:
// index.ts
import RouteConfig from "./scripts/routing.ts";
Run Code Online (Sandbox Code Playgroud)
有关ES6模块的文档:深度:模块中的ES6。
归档时间: |
|
查看次数: |
517 次 |
最近记录: |