使用Webpack构建k6 API项目时遇配置错误求助
问题描述
我有一个基于Node.js开发的k6 API调用项目,使用Webpack构建时出现配置错误。错误提示Webpack初始化的配置对象不符合API schema,具体是configuration.resolve.fallback['path']的配置不符合要求。
错误日志
k6-api@1.0.0 start webpack && node src/index.js [webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema. configuration.resolve.fallback should be one of these: [object { alias, name, onlyModule? }, ...] | object { <key>: [non-empty string, ...] | false | non-empty string } -> Redirect module requests. Details: * configuration.resolve.fallback['path'] should be one of these: [non-empty string, ...] | false | non-empty string -> New request. Details: * configuration.resolve.fallback['path'] should be an array: [non-empty string, ...] -> Multiple alternative requests. * configuration.resolve.fallback['path'] should be false. -> Ignore request (replace with empty module). * configuration.resolve.fallback['path'] should be a non-empty string. -> New request.
当前配置文件
webpack.config.js
import urlResolve from "url"; import fsResolve from "fs"; import pathResolve from "path-browserify"; export default { externals: { k6: "k6", }, resolve: { fallback: { url: urlResolve, fs: fsResolve, path: pathResolve }, }, };
package.json
{ "name": "k6-api", "version": "1.0.0", "main": "index.js", "scripts": { "start": "webpack && node src/index.js", "swagger": "swagger-jsdoc -o swagger.json" }, "dependencies": { "express": "^4.18.2", "k6": "^0.0.0", "path-browserify": "^1.0.1", "swagger-jsdoc": "^6.2.8", "url": "^0.11.3" }, "type": "module", "devDependencies": { "@babel/core": "^7.24.0", "@babel/preset-env": "^7.24.0", "@types/express": "^4.17.21", "@types/k6": "^0.49.1", "babel-loader": "^9.1.3", "core-js": "^3.36.0", "webpack": "^5.90.3", "webpack-cli": "^5.1.4" } }
解决方案
问题出在Webpack 5的resolve.fallback配置规则:该配置项要求每个键对应的值必须是非空字符串、false或者非空字符串数组,不能直接传入模块对象。原代码直接导入模块并赋值给fallback,违反了这个规则。
修改webpack.config.js如下:
export default { externals: { k6: "k6", }, resolve: { fallback: { url: "url", fs: false, path: "path-browserify" }, }, };
修改说明
- 移除了对
url、fs、path-browserify模块的直接导入,改用包名字符串作为fallback值,符合Webpack配置规范。 fs设置为false:Node.js和k6运行环境本身内置了fs模块,无需浏览器端替代包,设置为false让Webpack忽略该模块的fallback处理,避免冗余打包。
内容的提问来源于stack exchange,提问作者Safa
相关产品推荐
相关产品推荐

