如何在前端和后端之间共享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,因为这很容易出错,是双重工作。
我曾考虑在frontend
和backend
文件夹中的项目根目录中创build一个shared
文件夹,但我无法在浏览器中导入比frontend
文件夹中的index.html
文件更远的文件。
题
我怎样才能写一个TypeScript文件一次,并能够在frontend
和backend
文件夹中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;
希望这可以帮助。