2017-02-27 73 views
0

我试图创建混合​​角1 +角2的WebPack 我有嵌套模块的问题导入类

//a.ts

module a.b.c { 
    export class A { 
    } 
} 

// B .TS

module a.b.c { 
    export class B extends A { 
    } 
} 

代码编译,但我发现一个未定义 我试图进口以各种方式,但似乎没有任何工作 我是什么会d错了吗?

+0

“我尝试以各种方式导入......”您能否显示您尝试的任何示例? – Claies

+0

从'./a'导入{A}; –

+0

当导入像我越来越'一个不是一个模块' –

回答

0

您需要在b.ts中添加对a.ts的引用。

所以,只要编辑您b.ts如下:

/// <reference path="./a.ts" /> 
    module a.b.c { 
    export class B extends A { 
    public second; 
    } 
} 

此外,还需要包括b.ts前a.ts在HTML文件中:

<script src="./a.js"></script> 
<script src="./b.js"></script> 

否则,你会得到一个错误。

0

这是它以前的工作方式,但现在当我们添加webpack时,我发现使用引用不是最佳做法,webpack不会编译它。

如果我只是删除模块,比没有问题。但就像你说的那样,这是一个有很多内部模块的遗留代码。 如果没有这样做的好方法,最好的做法是删除模块,而不是我们可能做的那样。

0

好的,所以我会再次说,webpack确实没有真正的好办法,除非这是一个巨大的项目,否则转移到外部模块是一种方法。


如果大多数的文件看起来像这样:

//a.ts

module a.b.c { 
    export class A {} 
} 

//b.ts

module d.e.f { 
    export class B extends a.b.c.A 
} 

比它的相对容易,你只是做:

//a.ts

export module a.b.c { 
    export class A {} 
} 

//b.ts

import {a} from './a'; 
module d.e.f { 
    export class B extends a.b.c.A 
} 

然而,在你给的例子,你有两个文件组成同一个命名空间\内部模块 - a.b.c。这是很难对付的,你需要做一些丑陋的东西,如:

//b.ts

import {aImported} from './a'; 
module a.b.c { 
    export class B extends aImported.b.c.A 
} 

在此方案中,您的文件是外部模块和他们出口的内部模块。


也有不同的方法,这是把所有的旧代码,并编译+ Concat的它使用咕嘟咕嘟\咕噜,产生的js文件传递给的WebPack以前老同学。我过去做过这件事,我后悔了,后来离开了它。但它确实需要对代码进行最少量的更改,这是它的主要优点。总体而言,我认为它比以前的解决方案更糟糕......