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

Uncaught ReferenceError: require未定义,求无需Browserify的解决办法

解决浏览器环境中"require is not defined"的替代方案(无需Browserify)

你遇到的问题核心是:浏览器本身没有Node.js的require函数,而你安装的RequireJS是遵循AMD模块规范的加载器,和Node的CommonJS规范不兼容,所以直接用CommonJS风格的require('module')会报错。下面给你几个不用Browserify的可行思路:

方案1:改用RequireJS的AMD语法加载模块

RequireJS需要你用它的异步加载语法,而不是Node的同步require。步骤如下:

  1. 确保你已经在HTML中引入RequireJS的脚本:
    <script src="path/to/require.js"></script>
    
  2. 改写你的代码为AMD格式,用require的数组参数来指定依赖:
    require(['ecurve', 'bigi', 'crypto-js/aes', 'crypto-js/sha256', 'crypto-js'], function(ecurve, BigInteger, AES, SHA256, CryptoJS) {
        // 在这里写你的业务代码,比如使用ecurve、BigInteger等
        console.log(ecurve, CryptoJS.AES);
    });
    
  3. 注意:有些模块可能需要RequireJS的配置来映射路径,比如如果ecurve和bigi是通过npm安装的,你需要在RequireJS的配置里指定它们的位置:
    require.config({
        baseUrl: 'node_modules',
        paths: {
            'ecurve': 'ecurve/lib/index',
            'bigi': 'bigi/lib/bigi',
            'crypto-js': 'crypto-js'
        }
    });
    

方案2:使用ES模块(ESM)

现代浏览器已经原生支持ES模块,你可以把代码改成ESM格式:

  1. 将你的JS文件后缀改为.mjs,或者在HTML的script标签里加上type="module":
    <script type="module" src="your-script.js"></script>
    
  2. 用import语句替代require:
    import * as ecurve from './node_modules/ecurve/lib/index.js';
    import * as BigInteger from './node_modules/bigi/lib/bigi.js';
    import AES from './node_modules/crypto-js/aes.js';
    import SHA256 from './node_modules/crypto-js/sha256.js';
    import * as CryptoJS from './node_modules/crypto-js/crypto-js.js';
    
  3. 注意:如果某些模块没有提供ESM版本,你可能需要找它们的ESM兼容包,或者使用CDN上的ESM版本。

方案3:使用UMD版本的库(通过全局变量访问)

很多库都提供UMD(通用模块定义)版本,它兼容浏览器全局变量、AMD和CommonJS。你可以直接通过CDN加载这些库,然后使用全局变量:

  1. 在HTML中引入UMD版本的脚本:
    <!-- 加载bigi -->
    <script src="https://cdn.jsdelivr.net/npm/bigi@1.4.2/lib/bigi.js"></script>
    <!-- 加载ecurve -->
    <script src="https://cdn.jsdelivr.net/npm/ecurve@1.0.6/lib/index.js"></script>
    <!-- 加载crypto-js -->
    <script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.min.js"></script>
    
  2. 然后在你的代码中直接使用全局变量:
    // bigi的全局变量是BigInteger
    // ecurve的全局变量是ecurve
    // crypto-js的全局变量是CryptoJS
    console.log(ecurve, BigInteger, CryptoJS.AES, CryptoJS.SHA256);
    

这种方法最简单,不需要任何模块加载器,直接通过全局变量使用库的功能。


内容的提问来源于stack exchange,提问作者Az Emna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:02:54