如何在前端和后端之间共享TypeScript / JavaScript?

我有一个Node.js / w Angular.js项目的文件夹结构,像这样(来自项目根目录):

frontend frontend-file1.ts frontend-file2.ts backend backend-file1.ts backend-file2.ts 

我使用TypeScript编译器以及许多其他的gulp插件将其编译到build文件夹中,如下所示(注意frontend文件的public ):

 build backend-file1.js backend-file2.js public frontend-file1.js frontend-file2.js 

在源文件夹中,我使用ES6 / TypeScript import语句来导入文件。

例如:backend-file1.ts

 import './backend-file2'; 

情况

我写了一些自定义的应用程序function,应该由后端和前端使用。 我不想在这两个文件夹中重复相同的function,因为这很容易出错,是双重工作。

我曾考虑在frontendbackend文件夹中的项目根目录中创build一个shared文件夹,但我无法在浏览器中导入比frontend文件夹中的index.html文件更远的文件。

我怎样才能写一个TypeScript文件一次,并能够在frontendbackend文件夹中import此文件?

我只会像这样构造代码:

 - src/ - server/ - client/ - shared/ 

您可以将所有的共享库放到shared目录中,然后从服务器或客户端源文件中导入/请求它们:

 import '../shared/library' 

为了扩展已经给出的outFile case的答案,我将展示如何处理类共享的情况,当你不能或不想使用webpack / browserify / outFile选项。

结构看起来相似

 -client index.html app.ts -server service.ts -common helper.ts -dist -client -index.html -lib -client app.js -common helper.js -server service.js -common helper.js 

这个想法是你如何用你的构build结果构builddist文件夹。 我通过吞吐任务来完成这个任务,并且通过使用上面的结构,我可以从公共库中重用服务器端和客户端的组件。

注意。 要在客户端工作,请不要忘记在index.html中为systemjs设置基础URL:

  System.config({ baseURL: './lib' }); System.defaultJSExtensions = true; 

希望这可以帮助。