Javascript 如何将Swagger生成的代码与webpack绑定
我正在创建一个新的webApp,它需要使用restapi与服务器通信。我想使用Swagger来定义restapi,并为服务器和Javascript客户端(一个在浏览器中运行的简单webapp)生成代码 我能够实现服务器(使用JavaServlet),并且它工作正常 我已经为Javascript客户端生成了代码,但我无法使其正常工作(我是Javascript、webpack、nom等方面的初学者) 我想使用webpack生成一个.js文件,该文件将由webapp加载,该.js将包含由swagger生成的代码和我使用swagger发送查询的代码(…和一个UI!) 以下是我的项目组织:Javascript 如何将Swagger生成的代码与webpack绑定,javascript,webpack,swagger-codegen,Javascript,Webpack,Swagger Codegen,我正在创建一个新的webApp,它需要使用restapi与服务器通信。我想使用Swagger来定义restapi,并为服务器和Javascript客户端(一个在浏览器中运行的简单webapp)生成代码 我能够实现服务器(使用JavaServlet),并且它工作正常 我已经为Javascript客户端生成了代码,但我无法使其正常工作(我是Javascript、webpack、nom等方面的初学者) 我想使用webpack生成一个.js文件,该文件将由webapp加载,该.js将包含由swagger
/
- package.json
- node_modules (modules installed with npm)
- src
---> /main.js (code I have written to send the REST API query using Swagger generated code)
---> /index.js (code generated by Swagger)
---> /ApiClient.js (code generated by Swagger)
---> /api (folder that contains code generated by Swagger)
---> /model (folder that contains code generated by Swagger)
- webpack.config.js
- runTest ---> - bundle.js (generated by webpack) ---> - index.html
执行webpack命令时,出现了一些错误:
/node\u modules/.bin/webpack--config webpack.config.js
散列:
a77095b323ec225f9b17版本:网页2.6.1时间:396ms
资产大小Chunks Chunk Names bundle.js 6.48 kB 0[emissed]main[0]。/src/index.js 2.61 kB{0}[builded][1]
./src/main.js 212字节{0}[编译]
在./src/index.js模块中找不到错误:错误:无法解析
中的“ApiClient”
“/Users/sebastien/Documents/Javascript/Stackoverflow/superagentest/src”
@./src/index.js 17:4-86@./src/main.js
在./src/index.js模块中找不到错误:错误:无法解析
中的“模型/错误”
“/Users/sebastien/Documents/Javascript/Stackoverflow/superagentest/src”
@./src/index.js 17:4-86@./src/main.js
My main.js包含以下内容:
var MyMetadataApi = require('./index'); // See note below*.
var xxxSvc = new MyMetadataApi.defaultApi(); // Allocate the API class we're going to use.
var zzz = xxxSvc.myFieldsGet(); // Invoke the service.
index.js(由Swagger contains生成)
**注意:对于顶级AMD脚本,请使用require(['index'],function(){…})
*并将应用程序逻辑放入回调函数中。
*
*
*非AMD浏览器应用程序(不推荐)可能会执行以下操作:
*
*var xxxSvc=新的MyMetadataApi.XxxApi();//分配我们将要使用的API类。
*var yyy=新的MyMetadataApi.yyy();//构造一个模型实例。
*YYYYModel.someProperty='someValue';
* ...
*var zzz=xxxSvc.doSomething(YYYY型号);//调用服务。
* ...
*
*
*@模块索引
*@version 1.0.0
*/
var导出={
/**
*ApiClient构造函数。
*@property{module:ApiClient}
*/
ApiClient:ApiClient,
/**
*错误模型构造函数。
*@property{module:model/Error}
*/
错误:错误,
/**
*MyField模型构造函数。
*@property{module:model/MyField}
*/
MyField:MyField,
/**
*DefaultApi服务构造函数。
*@property{module:api/DefaultApi}
*/
DefaultApi:DefaultApi
};
出口退税;
}));
如何使webpack生成一个bundle.js,该bundle.js将成功包含由Swagger和my main.js生成的代码
我对导入/要求感到迷茫。。。我尝试用一些导入来替换require(),但没有成功(或者它可以读取index.js,但在index.js中发现问题,因为它无法导入ApiClient.js)。
Swagger生成的代码提到了什么是AMD和CommonJS应用程序
任何帮助都将不胜感激;-)
谢谢
Sebastien我找到了一个解决方案,我需要在我的webpack.config.js中添加以下内容 我在swagger codegen GitHub存储库中找到了此修复程序:
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['ApiClient', 'model/Error', 'model/MyField', 'api/DefaultApi'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports, like Node.
module.exports = factory(require('./ApiClient'), require('./model/Error'), require('./model/MyField'), require('./api/DefaultApi'));
}
}(function(ApiClient, Error, MyField, DefaultApi) {
'use strict';
/**
* get_My_fields.<br>
* The <code>index</code> module provides access to constructors for all the classes which comprise the public API.
* <p>
* An AMD (recommended!) or CommonJS application will generally do something equivalent to the following:
* <pre>
* var MyMetadataApi = require('index'); // See note below*.
* var xxxSvc = new MyMetadataApi.XxxApi(); // Allocate the API class we're going to use.
* var yyyModel = new MyMetadataApi.Yyy(); // Construct a model instance.
* yyyModel.someProperty = 'someValue';
* ...
* var zzz = xxxSvc.doSomething(yyyModel); // Invoke the service.
* ...
* </pre>
* <em>*NOTE: For a top-level AMD script, use require(['index'], function(){...})
* and put the application logic within the callback function.</em>
* </p>
* <p>
* A non-AMD browser application (discouraged) might do something like this:
* <pre>
* var xxxSvc = new MyMetadataApi.XxxApi(); // Allocate the API class we're going to use.
* var yyy = new MyMetadataApi.Yyy(); // Construct a model instance.
* yyyModel.someProperty = 'someValue';
* ...
* var zzz = xxxSvc.doSomething(yyyModel); // Invoke the service.
* ...
* </pre>
* </p>
* @module index
* @version 1.0.0
*/
var exports = {
/**
* The ApiClient constructor.
* @property {module:ApiClient}
*/
ApiClient: ApiClient,
/**
* The Error model constructor.
* @property {module:model/Error}
*/
Error: Error,
/**
* The MyField model constructor.
* @property {module:model/MyField}
*/
MyField: MyField,
/**
* The DefaultApi service constructor.
* @property {module:api/DefaultApi}
*/
DefaultApi: DefaultApi
};
return exports;
}));
module: {
rules: [
{
test: /my_client\/.*\.js$/,
use: 'imports-loader?define=>false'
}
]
},
node: {
fs: 'empty'
}