2017-04-05 112 views
0

我有一个用typescript制作的模块,我没有编译成javascript,因为我想让我的主应用程序这样做。 因此,我有一个文件结构是这样的:node_modules中的typescript模块应该已经编译

my-project 
---node_modules 
------my-module 
---------index.ts 
---src 
------myfile.ts 

myfile.ts

import { x } from 'my-module'; 

tsconfig

{ 
    "compilerOptions": { 
     "target": "es5", 
     "lib": ["es6", "dom"], 
     "types": ["reflect-metadata"], 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": false, 
     "sourceMap": true, 
     "declaration": false, 
     "outDir": "out" 
    }, 
    "exclude": [ 
     "node_modules", 
     "out" 
    ] 
} 

Visual Studio代码不抱怨,它发现该模块,并给我intellisens。然而当运行程序时,我得到:

Error: Cannot find module 'my-module'

虽然它工作得很好,但它是我正在导入的接口。因此,我认为这是因为typescript不遵循导入和编译,我认为它会这样做。

在发布到npm之前,我是否必须将我的打字稿模块编译为javascript,或者是否存在可供我使用的设置?

PS:如果我在发布到npm之前编译,它工作正常。我只是想知道:我必须这样做吗?

回答

2

作为一般的最佳实践,您应该将包的“二进制文件”发布到npm。使用TypeScript,这意味着转储的.js文件。

这允许你的包的用户使用它,而不需要额外的构建它的复杂性。也就是说,二进制文件直接“准备好使用”。这就是说,如果你还包括(TS)的来源,你仍然可以在项目中以你喜欢的任何方式编译它们,这取决于你的包。换句话说,仅仅因为您提供二进制文件作为一种便利,最终用户可以选择直接在他们的项目中使用源代码。

+0

你的回答的语气似乎暗示这只是最好的做法,但即使没有编译过的'.js',它也应该可以工作。我可以编译它预先发布,但是,如果它没有编译时不起作用,这意味着当我编译它并发布到npm时,那么当我使用该模块时,它将使用已编译的'.js'和不编译'.ts'。这是我对此的掌握,因为也许我想在第二个项目中使用不同的配置进行编译 – Ced

相关问题