You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Js2Py执行含require()的JS文件时出现报错问题咨询

解决Js2Py中require()方法报错的问题

Js2Py本质是在Python环境中模拟ECMAScript运行环境,默认不支持Node.js的require()模块加载机制,这就是你执行带require()的JS代码时报错的核心原因。下面是几种可行的解决方法:

方法1:手动替换require()为纯JS实现

如果你的JS代码里的require()只是加载本地小型JS模块,可以直接把依赖模块的代码合并到主文件中,或者手动模拟模块导出:

  • 比如原依赖模块utils.js:
    module.exports = {
      calculate: function(num) { return num * 2; }
    };
    
    可以改成全局变量导出:
    window.utils = {
      calculate: function(num) { return num * 2; }
    };
    
  • 主JS文件里直接用utils.calculate()替代require('./utils').calculate()即可。

方法2:用Js2Py的模块注册功能模拟require()

Js2Py提供了add_module()方法,可以手动注册模块,让JS代码里的require()能找到对应的模块:

示例代码(Python端):

import js2py

# 注册本地JS模块
def register_js_module(module_name, js_file_path):
    with open(js_file_path, 'r', encoding='utf-8') as f:
        module_code = f.read()
    js2py.add_module(module_name, module_code)

# 注册你的依赖模块(比如utils.js,命名为'utils')
register_js_module('utils', './utils.js')

# 执行主JS代码
main_js_code = """
const utils = require('utils');
console.log(utils.calculate(5)); // 输出10
"""
js2py.eval_js(main_js_code)

注意:这种方式的require()只能通过模块名调用,不支持相对路径解析,所有依赖模块都需要提前注册。

方法3:改用execjs调用真实Node环境

如果你的JS代码依赖大量Node.js内置模块或第三方npm包,Js2Py的模拟环境很难满足需求,此时推荐用execjs,它会调用本地安装的Node.js来执行代码,天然支持require():

示例代码(Python端):

import execjs

# 读取目标JS文件
with open('./your-main-script.js', 'r', encoding='utf-8') as f:
    js_code = f.read()

# 编译并执行JS代码
ctx = execjs.compile(js_code)
# 调用JS中的目标函数
result = ctx.call('yourTargetFunction', 'param1', 'param2')
print(result)

前提:你的系统需要安装Node.js,并确保node命令能在终端正常执行。

内容的提问来源于stack exchange,提问作者Talented Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:25:39