如何连线Angular2 + Webpack + Node + Express?

首先,我是有线的,有工作的,但对结果有些不满,有一种感觉可以改善。

(目前的结果可以在这里find – https://github.com/MarkKharitonov/Angular2WebpackNodeExpress/tree/v0.0.1 。)

目录结构是:

C:. │ .gitignore │ package.json │ tsconfig.json │ tslint.json │ typings.json │ webpack.config.js │ ├───dist │ └───server │ api.js │ api.js.map │ main.js │ main.js.map │ └───src ├───client │ app.component.ts │ index.html │ main.ts │ polyfills.ts │ tsconfig.json │ vendor.ts │ └───server api.ts main.ts tsconfig.json 

现在dist文件夹只有从./src/server编译的服务器端文件。 它们被IntelliJ IDEA放置在那里,因为./src/server/tsconfig.json在保存时请求编译。

客户端绑定发生在webpack-dev-server的内存中。 ./src/client/tsconfig.json在保存时不会请求编译。

我不喜欢我目前的设置的东西在这里描述 – https://github.com/MarkKharitonov/Angular2WebpackNodeExpress/tree/v0.0.1#problems ,即:

  1. webpack将会处理./src/client下的任何.js文件 – 它们将被捆绑并自动放置在./dist/client下。 但是./src/server下的plain .js文件呢? 我需要一个任务跑步者(吞咽,咕噜,无论…)还是有一个解决scheme内的webpack?
  2. 我有三个tsconfig.json文件 – ./src/client/tsconfig.json,./src/server/tsconfig.json./tsconfig.json 。 这三个文件共享大部分选项,但不是全部。 现在我把它们复制到三个文件中的每一个 – 不是很好。
  3. 另外,由于typings文件夹在根目录下,我必须启动所有顶级TypeScript文件( 。\ src \ client \ main.ts。\ src \ client \ polyfills.ts。\ src \ client \ vendor。 ts。\ src \ server \ main.ts )与/// <reference path="../../typings/index.d.ts" />

因此,问题是:

  1. webpack也可以处理服务器端文件,但不同于客户端? 即是transpile – 是的,复制到dist – 是的,捆绑 – 不是? 请记住我正在使用webpack-dev-server。
  2. 是否有可能inheritancetsconfig.jsonconfiguration,以便我可以避免重复我拥有的三个文件的许多选项?
  3. 当文件布局与我的类似时,是否/// <reference path="../../typings/index.d.ts" />在顶级TypeScript文件中包含/// <reference path="../../typings/index.d.ts" />

我知道这些是三个问题,而不是一个问题,但是我觉得他们都是密切相关的,对一个问题的答案也可以成为另一个问题的答案。

  1. 我不认为你需要/想要webpack来处理服务器端文件。 将服务器端文件传输和复制到/ dist由Typescript编译器(通过outDirconfiguration)处理。 由于在webpackconfiguration中没有服务器文件被指定为入口点,所以不会有捆绑的服务器端文件。
  2. 目前不可能。 但是,看起来像有一个问题来跟踪: https : //github.com/Microsoft/TypeScript/issues/9876
  3. 不确定,以某种方式(但不是真的)与#3有关。 只要你想保持客户端和服务器文件真正分离,我就可以想象没有。