使用require.js加载AMD模块时遇rjs.config is not a function错误求助
解决
rjs.config is not a function错误 项目结构
src |- main.js |- math.js
math.js是一个AMD模块,我在main.js中引用它。已通过npm安装require.js,并在main.js中引入:
main.js代码
//main.js var rjs = require('requirejs'); rjs.config({ //Pass the top-level main.js/index.js require //function to requirejs so that node modules //are loaded relative to the top-level JS file. nodeRequire: require, }); rjs(["./math.js"], function(math) { console.log(math.add(2, 3)); });
math.js代码
//math.js define("math", function() { function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } function multiply(a, b) { return a * b; } function divide(a, b) { return a / b; } return { add, subtract, multiply, divide }; });
错误信息
执行r.js ./src/main.js命令时,出现以下错误:
rjs.config is not a function at /Users/dheerajmahra/Desktop/learning/different-module-formats/src/main.js:3:5 at /Users/dheerajmahra/Desktop/learning/different-module-formats/src/main.js:14:2 at Script.runInThisContext (vm.js:96:20) at Object.runInThisContext (vm.js:303:38) ....
问题原因与解决方法
核心问题
你混淆了r.js和RequireJS在Node环境中的用法:
require('requirejs')返回的RequireJS实例支持config方法,这是给Node直接执行脚本使用的。r.js是AMD模块的打包优化工具,并非用来直接运行Node脚本的工具,用它执行main.js会打乱RequireJS的加载逻辑,导致rjs.config方法不存在。
具体解决步骤
- 直接运行脚本:放弃用
r.js执行main.js,改用Node命令直接运行:
node src/main.js
- 若需打包模块:如果是想用
r.js打包AMD模块,需单独创建打包配置文件(比如build.js),示例如下:
// build.js ({ baseUrl: 'src', name: 'main', out: 'dist/main-built.js' })
然后执行打包命令:
r.js -o build.js
- 优化模块引用:
math.js定义了具名模块"math",在main.js中可以直接用模块名引用,避免路径问题:
rjs(["math"], function(math) { console.log(math.add(2, 3)); });
内容的提问来源于stack exchange,提问作者Stack
相关产品推荐
相关产品推荐

