Surnet / swagger-jsdoc

Generates swagger/openapi specification based on jsDoc comments and YAML files.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

webpack documentation

airedwin opened this issue · comments

Is your feature request related to a problem? Please describe.
Is there an examples on how to get this working with webpack? I'm always getting the "No Operations Defined in Spec!" when I build with webpack. I think it is due to the path I specify options.apis isn't correct for webpack?

Describe the solution you'd like
An example using webpack

Describe alternatives you've considered
None

Additional context
None

Hi @airedwin can you share how are configuring the swagger-jsdoc with webpack?

This error is commonly related with some mismatch on configuration specs and paths.

@daniloab I got it working by having two configs, for local dev (no webpack build) I use the swagger-jsdoc object or whatever and for production (webpack bundling) i use a swagger.json that I generate at build time script with swagger-jsdoc cli ("swagger": "node ./node_modules/swagger-jsdoc/bin/swagger-jsdoc.js -d ./swagger/definition.cjs ./routes/routes.js -o swagger.json"
so i do npm run swagger then npm run build for example

it would be nice if i didn't have to do that
my directory set up is ./api/src/webpack.config.js and my routes are in ./api/src/routes/routes.js
in the options i'm using apis: ['./api/src/routes/routes.js']
which works when starting npm from the root
"serve-api": "node ./api/src/server.js"
"start": "concurrently --kill-others \"npm run serve-api-dev\" \"npm run serve\""
but does not work when webpack is built, i'm assuming because my routes.js and the comments don't exist after webpack bundles

keep same path with index.js => swaggerOptions.api, and you can find path in swagger

webpack.config.js:

optimization: {
// minimize: true,
minimizer: [
new TerserPlugin({
extractComments: { // keep same path with index.js => swaggerOptions.api
condition: /^**!|@swagger/i,
filename: (fileData) => {
// The "fileData" argument contains object with "filename", "basename", "query" and "hash"
return ./controller/swaggerComments.js;
},
},
}),
],
},