2017-02-13 71 views
2

tl; dr:模块分辨率不适用?Typescript2路径模块分辨率

你好,

我正在玩Typescript2模块分辨率功能。

我注意到,现在可以指定 “路径”,这样就可以做到以下几点:

老办法

import {a} from "../../../foo" 

新方式

import {a} from "services/foo" 

要做到这一点,你需要添加一些配置到你的tsconfig.json

"compilerOptions": { 
     "baseUrl": ".", 
     "paths": { 
      "services/*": ["./application/core/services/*"], 
     } 
    } 

问题是我编译时导入实际上没有改变。我的JavaScript输出仍然包含从“services/foo”导入,所以在运行时显然会在我的节点服务器上崩溃。

我用一口-打字稿编译我的javascript文件:

var tsProject = ts.createProject("tsconfig.json"); 
return tsProject.src() 
    .pipe(sourcemaps.init()) 
    .pipe(tsProject()).js 
    .pipe(sourcemaps.write("../api")) 
    .pipe(gulp.dest(function(file) { 
     return file.base; 
})); 

我完全失去了这里,并愿意使用该模块的分辨率,这样我可以从移开../../地狱的进口。任何帮助将不胜感激!

回答

1

这里的问题是,JavaScript引擎对TypeScript配置一无所知,您在tsconfig中指定的内容仅用于“编译时”,当您将TypeScript编译为JS时,您需要执行与TS编译器只是将解析后的路径保存在JS文件中。

简而言之,所有的JS文件需要被处理,别名被替换为“真实”的路径。提示:使用npm工具tspath(https://www.npmjs.com/package/tspath),它需要0配置,只需在项目中的某处运行它,所有JS文件将被处理并准备运行!