【问题标题】:Buffer not found in Node.JS browser code在 Node.JS 浏览器代码中找不到缓冲区
【发布时间】:2016-12-17 12:54:31
【问题描述】:

我想在浏览器上使用带有browserify 的node.js 函数。在我的代码中,有如下一行:

var x = new Buffer('abc..', 'hex')

但是,这会导致错误 ReferenceError: Buffer is not defined。我尝试安装[buffer-browserify][1] 并像这样包含它:

var Buffer = require('buffer');

但现在我收到错误 Error: Cannot find module 'buffer'..

那么-如何-我可以在浏览器javascript中使用Buffer类吗?

感谢您的帮助,

更新:

为了使用browserify 构建它,我创建了一个input.js 文件,如下所示:

var Buffer = require('buffer');
console.log(Buffer);

我尝试使用browserify input.js -o output.js 构建它,并在我的浏览器代码中包含output.js,它会打印Buffer 变量。但是,当我尝试使用它时,仍然会遇到相同的错误 (ReferenceError: Buffer is not defined)。

【问题讨论】:

  • 我想我需要以某种方式使用 browserify 命令并将该文件包含在

标签: javascript node.js browserify


【解决方案1】:

这是可以理解的混乱,但这里是如何使它工作,并带有一些解释性项目符号。

1) 创建您的源 javascript 文件

// app.js file
var privateKey = new Buffer('abcdef00', 'hex')
console.log(privateKey.toString('hex'))
  • 不是你不需要在这里需要require('Buffer') 电话。 Browserify 将使一些 node.js 核心全局变量自动可用。由于Buffer 在 npm 中是全局的(也就是说你不必调用require 来使用它),你可以直接使用它。
  • 这会将密钥打印到控制台

2) 从命令行浏览它

npm install --save browserify
$(npm bin)/browserify app.js > app-browser.js

3) 从 HTML 文件中引用 app-browser.js

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title>Browserify buffer</title>
</head>
<body>
<h1>Browserify Buffer</h1>
<script src="app-browser.js">
</script>
</body>
</html>

【讨论】:

  • 有效!并感谢您的澄清。所以我需要在输入代码中做任何我需要的事情,只包含输出。但我实际上想获取私钥并在浏览器上完成其余的工作,只需将最终输出发送到服务器即可。我可以在这个计划中做到吗?即我可以确保永远不会将私钥发送到服务器吗?为此,我想我需要在app.js 中定义一个函数并从app-browser.js 调用它。然后我可以确保数据保留在浏览器上,对吧?
  • 可能最好作为一个单独的问题,但是是的,您可以通过浏览器中的其他方式获取私钥的十六进制字符串。这意味着不要将它作为字符串文字包含在源代码中,例如,通过 HTML 输入元素请求它。然后你可以得到这个值,用它来构造一个缓冲区,并在服务器不知道私钥的情况下做你需要的事情。
  • 这两个文件之间也没有调用函数。它们是相同的代码,只是准备在节点 (app.js) 或浏览器 (app-browser.js) 中运行。不能互相引用。它们是同一程序的 2 个变体。
  • 太棒了!这听起来像我需要的。在我的最后评论中,我的意思是从浏览器代码中调用“捆绑包”中定义的函数。在我包含它之后,可能在另一个
【解决方案2】:

你安装了吗?

npm 安装缓冲区

var Buffer = require('buffer').Buffer

【讨论】:

  • 缓冲区是节点的一部分,有什么要安装的? nodejs.org/api/buffer.html
  • 是的,它已安装,但无法在浏览器端运行。也不是.Buffer..
  • 这不是你的 webapp 项目中使用的 node.js :) 你需要安装它。 Browserify 允许你只使用需要的语法和简单的方式来开发。
  • 嗯,你的 browserify 是怎么做的?你有一个 gulp 或 grunt 文件吗?
  • 你能需要另一个外部 node_module 吗?如果可以,那就很奇怪了,否则就是关于如何使您的浏览器化的问题
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 2011-10-18
相关资源
最近更新 更多