2016-09-20 54 views
0

我有以下结构的烧瓶项目:Webassets +打字稿,不能解析符号/模块

├─ app.py 
├─ project 
| ├─ __init__.py 
| └─ static 
|  └─ typescript 
|  └─ app.ts 
└─ typings 
    ├─ globals 
    | └─ ... # multiple imported ts libraries 
    └─ index.d.ts 

我使用的是webpacker集成称为Flask Assets。我已经设置了编译像这样(在__init__.py

ts = get_filter('typescript') 
ts.load_paths = [ 
    #os.path.join(config.APP_ROOT, '..', 'typings'), # doesn't do anything :/ 
    os.path.join(app.static_folder, 'typescript') 
] 

assets.register('javascript', Bundle(
    'typescript/app.ts', 
    filters = (ts, 'jsmin'), 
    output = 'js/app-%(version)s.js' 
)) 

我app.ts是,或多或少,

class SomeClass { 
    ... various class methods, using things like jQuery and CryptoJS 
} 

没有进口 - 我真的不知道是否我需要他们。

我得到特定的错误是

Cannot find name 'JQuery'. 
../../../../../var/folders/5t/4x0gmsdx0dbbgv_fr3cv3x6m0000gn/T/tmphFTSQo.ts(7,17): error TS2503: Cannot find namespace 'CryptoJS'. 
../../../../../var/folders/5t/4x0gmsdx0dbbgv_fr3cv3x6m0000gn/T/tmphFTSQo.ts(10,27): error TS2304: Cannot find name '$'. 
... a bunch more about other symbols 

回答

0

解决它......

glob_string = os.path.join(config.APP_ROOT, '..', 'typings', '*', '*', '*.d.ts') 

assets.register('javascript', Bundle(
    glob.glob(glob_string), 
    'typescript/app.ts', 
    filters = ('typescript', 'jsmin'), 
    output = 'js/app-%(version)s.js' 
)) 

基本上我只是“手动”的所有定义文件添加到包(使用glob)。仅在类型dir的根目录中添加index.d.ts是不够的,因为打字过滤器在编译之前将.ts复制到临时文件(在/tmp中),并且index.d.ts中的路径是相对的。

还应该注意的是ts.load_paths什么都不做......