NodeJS中在模块项目中加载cjs的正确方法

iyr7buue  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(125)

给予你一点上下文,我应该开发代码的机器人使用网页作为主要的开发基础,这意味着,行动代码必须写在网页上,所以我猜有问题的代码是加载在服务器端,然后运行eval时appropiate.这是确定的几行代码,但在一个大项目,你可以想象的那种噩梦它可以.
所以我的目标是建立一个测试环境,并将代码放在git repo下。然后,一旦我的测试通过,我就可以上传代码。
现在,我手头的特殊问题是:现在我希望能够从nodejs模块加载JavaScript文件,加载函数并能够从测试套件运行该函数:
sarasa.js代码:

function sarasa2(){
    console.log( " aca toy!");    
    return true;
}

字符串
测试代码:

import { Test } from "../../myjsunit/testSuite.js";

import  fs from 'fs';

class so_Test extends Test {
    
    test_load_and_run(){
        let fname = "testsjs/micro/sarasa.js";
        
        let code = fs.readFileSync( fname ).toString() ;
        
        eval( "("+code+")" );
        
        let actual = sarasa2();

        this.assertTrue( actual );
        this.done();
    }
}

export { so_Test }


(请不要担心测试框架)
我得到的错误是:
引用错误:sarasa2未定义
问:是否可以运行在加载文件中定义的函数?

vxqlmq5t

vxqlmq5t1#

@Zer0提供的提示是正确的。你可以有一个nodejs项目混合模块和commonjs,前提是在propper目录中有一个package.json:我必须设置一个专门用于commonjs代码的目录,然后从单元测试中要求()。
“生产”代码:

module.exports.sarasa2 =  function sarasa2(){
    return true;
}

字符串

function sarasa2(){
    return true;
}

module.exports = { sarasa2 }


测试代码:

import { Test } from "../../myjsunit/testSuite.js";
import { createRequire } from 'node:module';

class so_Test extends Test {

    test_load_and_run(){
        let path = process.cwd();
        let fname = path+"/testsjs/micro/sarasa.cjs";

        const require = createRequire( fname );
        let code = require( "./sarasa.cjs" );

        let actual = code.sarasa2();

        this.assertTrue( actual );

        this.done();
    }
}

export { so_Test }

相关问题