Node.js自定义模块导出函数调用提示not a function错误如何解决
Node.js 自定义模块调用报错解决方案
问题原因
你在processTest.js中使用的是module.exports = runTest默认导出语法,代表整个模块导出的值就是runTest函数本身,而非挂载了runTest方法的对象。主脚本中错误将引入的processTest变量当作包含属性的对象调用,自然会抛出类型错误。
修正方案
有两种可选修正方式:
- 方案1:修改主脚本调用逻辑,直接调用引入的变量本身
将原有调用代码
processTest.runTest();
修改为
processTest();
- 方案2:修改
processTest.js导出逻辑,改为导出包含方法的对象
将原有导出代码
module.exports = runTest;
修改为
module.exports = { runTest };
可选优化
你当前代码中将spawn逻辑写在模块顶层,会导致模块第一次被引入时就触发子进程执行,而非调用runTest时才执行。如果要实现调用函数才触发子进程,可将spawn逻辑移到runTest函数内部:
'use strict'; const { spawn } = require( 'child_process' ); function runTest() { const ls = spawn( 'ls', [ '-lh', '/usr' ] ); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process exited with code ${code}`); }); } module.exports = runTest;
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

