我正在尝试使以下设置正常工作:
- 标准 Aurelia “Hello World” Typescript 应用程序(由 CLI 创建,由 Webpack 构建)
- 由使用 webpack-dev-middleware 的 ExpressJS 应用程序提供服务
- 为了能够在 Aurelia 前端应用程序和 ExpressJS 后端应用程序之间共享代码,一切都结合在一个项目中
我盯着“Hello World”Aurelia 应用程序,将代码移动到一个src/frontend
文件夹中,将webpack.config.js
towebpack-frontend.config.js
和 npm 脚本重命名为start-frontend
等等。经过这些修改,Aurelia 应用程序仍然运行良好。
然后我添加了一个基本的 Express JS 后端应用程序,它有自己的 webpack.config.js、tsconfig.js,当然还有 npm start 脚本,它也可以正常工作。
webpack-dev-middleware
最后我试图让 Express 应用程序通过这样的方式启动前端应用程序:
private applyWebpackDevMiddleware(server: Express) {
if (Environment.isLocal()) {
const config = require('../../webpack-frontend.config.js');
const compiler = require('webpack')(config);
const webpackDevMiddleware = require('webpack-dev-middleware');
server.use(
webpackDevMiddleware(compiler, {
hot: true,
publicPath: config.output.publicPath,
compress: true,
host: 'localhost',
port: Environment.getPort()
})
);
const webpackHotMiddleware = require('webpack-hot-middleware');
server.use(webpackHotMiddleware(compiler));
}
}
这与直接与 webpack 命令一起使用时可以正常工作的 webpack 配置文件完全相同。但是,像这样,我收到以下错误消息:
(node:15111) UnhandledPromiseRejectionWarning: WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
- configuration should be an object.
at webpack (/Users/will/Desktop/test/aurelia-express/node_modules/webpack/lib/webpack.js:31:9)
at ExpressServer.applyWebpackDevMiddleware (/Users/will/Desktop/test/aurelia-express/src/backend/ExpressServer.ts:141:48)
at ExpressServer.setup (/Users/will/Desktop/test/aurelia-express/src/backend/ExpressServer.ts:41:14)
at Function.createApplication (/Users/will/Desktop/test/aurelia-express/src/backend/Application.ts:18:29)
at Object.<anonymous> (/Users/will/Desktop/test/aurelia-express/src/backend/index.ts:12:13)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Module.m._compile (/Users/will/Desktop/test/aurelia-express/node_modules/ts-node/src/index.ts:439:23)
at Module._extensions..js (internal/modules/cjs/loader.js:827:10)
at Object.require.extensions.(anonymous function) [as .ts] (/Users/will/Desktop/test/aurelia-express/node_modules/ts-node/src/index.ts:442:12)
at Module.load (internal/modules/cjs/loader.js:685:32)
at Function.Module._load (internal/modules/cjs/loader.js:620:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:877:12)
at Object.<anonymous> (/Users/will/Desktop/test/aurelia-express/node_modules/ts-node/src/bin.ts:157:12)
at Module._compile (internal/modules/cjs/loader.js:816:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
at Module.load (internal/modules/cjs/loader.js:685:32)
(node:15111) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
谁能给我一些指示,为什么直接在 webpack 中使用相同的配置文件可以正常工作,但在通过 webpack-dev-middleware 使用时会失败?毕竟,它在同一个项目中具有相同的 node_modules,因此具有相同的 webpack 版本,对吧?
或者是否有人可以共享如上所述的工作设置?谢谢!!