问题描述
我们在nodeJs应用程序中实现了大摇大摆。到目前为止,我们已经使用webpack创建了生产版本,并删除了控制器和服务文件。
bin / www.js
const YAML = require('yamljs');
const swaggerTools = require('swagger-tools');
const swaggerDoc = YAML.safeLoad('./swagger.yaml');
// swaggerRouter configuration
const swaggerOptions = {
controllers: path.join(__dirname,'../public/javascripts/controllers'),useStubs: true,// Conditionally turn on stubs (mock mode)
};
// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc,(middleware) => {
// Interpret Swagger resources and attach Metadata to request - must be first in swagger-tools middleware chain
app.use(middleware.swaggerMetadata());
// validate the security using JWT token
app.use(middleware.swaggerSecurity({
Bearer: auth.verifyToken
}));
// Validate Swagger requests
app.use(middleware.swaggerValidator({
validateResponse: true
}));
// Route validated requests to appropriate controller
app.use(middleware.swaggerRouter(swaggerOptions));
// Serve the Swagger documents and Swagger UI
app.use(middleware.swaggerUi());
});
如果我们在生产构建中做过同样的事情,并且庞大的中间件期望解决的路径相同。构建完成后,我们将删除公用文件夹。
Webpack代码
const path = require('path');
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
server: './bin/www',},output: {
path: path.join(__dirname,'dist'),publicPath: '/',filename: 'server.build.js',target: 'node',node: {
// Need this when working with express,otherwise the build fails
__dirname: false,// if you don't put this is,__dirname
__filename: false,// and __filename return blank or /
},externals: [nodeExternals()],module: {
rules: [
{
// Transpiles ES6-8 into ES5
test: /\.js$/,exclude: /node_modules/,use: {
loader: 'babel-loader',],};
请帮助我们使用敏捷的中间件创建构建
预先感谢
解决方法
Swagger工具不是像webpack这样的打包程序。因此,您仍然需要为其提供控制器文件。由于您要从产品中删除/ public,因此摇摇欲坠的工具中间件无法获取所需的文件。在这种情况下,Webpack基本上是在与您的代码建立距离,这就是为什么可以删除控制器和服务的原因。