未捕获的 ReferenceError: 要求未在 app.js:3 中定义

Posted

技术标签:

【中文标题】未捕获的 ReferenceError: 要求未在 app.js:3 中定义【英文标题】:Uncaught ReferenceError: require is not defined at app.js:3 【发布时间】:2019-03-13 08:57:10 【问题描述】:

在将前端 html 连接到私有区块链以与智能合约交互时遇到问题。

步骤完成如下:

创建了一个智能合约并部署在 pvt 区块链中。 npm install -g web3 创建 HTML 文件并与下面的 js 文件链接。

// 示例 app.js 文件代码

var Web3 = require('web3');
var web3 = new Web3();

if (typeof web3 !== 'undefined') alert(" web3.currentProvider :: " + web3.currentProvider);
    web3 = new Web3(web3.currentProvider);
 else 
    // set the provider you want from Web3.providers
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
 

 var abi= My-custom-ABI;


 var ins=web3.eth.contract(abi);
 var instance= ins.at("My-Contract-Address");
 var accounts;
 var account;
 var account2;

【问题讨论】:

您是否有任何类型的构建过程,或者您是否在 HTML 页面中按原样引用了 app.js 文件? 与打字稿一起使用,你应该遵循不同的语法,import Web3 = require("web3"); // 注意特殊语法!如有疑问,请复制此行! 并使用 npm install --dev @types/web3.js 安装@types/web3.js 查看此链接了解更多详情 - github.com/ethereum/web3.js/blob/1.0/… @NagaSaiA 尽管问题(可能错误地)用 TypeScript 标记,但显示的代码是“正常的”ECMAScript/javascript ..(无论如何,var abi= My-custom-ABI; 显然是错误的,但这是另一个问题) 【参考方案1】:

你应该安装它作为你的依赖,试试npm install --save web3。另外,你需要 webpack 来编译你的 javascript,因为浏览器不理解 require 语法。

【讨论】:

npm install --save web3 已在本地和全局安装它。然后问题仍然存在。但我使用“nodemon”运行了 js 文件并检查了 html 页面。 @Stijin 没有使用任何构建过程来引用 js 文件。 通过使用nodemon,这意味着你在nodejs环境中。因此,您使用节点 js 提供页面。默认情况下,nodejs 支持需要语法,它应该没有任何问题。您能否提供有关您的 package.json 的更多信息?就像你的 npm 脚本一样。另外,尝试制作另一个js文件,并要求它查看问题是否仍然存在。像这样, var js = require('./another.js')

以上是关于未捕获的 ReferenceError: 要求未在 app.js:3 中定义的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:(函数)未在 HTMLButtonElement.onclick 中定义

未捕获的 ReferenceError:全局未在 eval 中定义

未捕获的 ReferenceError:jQuery 未在 eval 中定义

visual studio typescript“未捕获的ReferenceError:未在...定义导出” [重复]

未捕获的 ReferenceError:ace 未在 Angular 4 中定义

如何修复“未捕获的 ReferenceError:Vue 未在 vuetemplatetest.2.html:19 中定义”