使用browserify时,出现"Uncaught ReferenceError: function is not defined"错误。

14

我正在尝试使用http://browserify.org/上的示例,并试图进行以下函数调用:

我的html代码如下:

<!DOCTYPE html>
<html>
<head>
<title>Test Browserify</title>

<script src="bundle.js"></script>

</head>
<body>
  <button onclick="hello()">test</button>
 </body>
</html>

我的 JavaScript 代码如下:

var unique = require('uniq');

var data = [1, 2, 2, 3, 4, 5, 5, 5, 6];

console.log(unique(data));

function hello(){
    alert("here");
}

我运行了命令"browserify main.js -o bundle.js",这样我就可以成功使用"require"了。

但是当我点击按钮时,出现了以下错误:

"Uncaught ReferenceError: hello is not defined"

如果有任何建议,将不胜感激!


我猜你在js控制台上看到了1、2、3、4、5、6被打印出来了? - cchamberlain
2个回答

14

Browserify的主要目的是使JavaScript模块私有化,因此它无法看到您正在尝试进行的操作。

尝试使用

global.hello = function() { alert("hello");}

请参见定义Browserify全局变量

通常来说,这是一种不好的做法,你应该从你的模块中导出公共属性,并通过所需的模块引用来引用它们。


我尝试将我的函数导出,但是无法弄清如何在html文件中进行正确的导入。我从main.js中这样导出:module.exports.beep = function (n) { return n * 1000 }。我尝试按照以下方式将其导入到我的index.html中:<script src="bundle.js"></script>。我像这样运行browserify:browserify src/main.js -o public/bundle.js。然而,当我尝试在浏览器中加载index.html时,出现了"Uncaught ReferenceError: beep is not defined"的错误。使用你的 global.hello方法可以解决问题!但如果可能的话,我仍然想使用模块引用。 - Michael Osofsky
你的意思是/你想说的是 _在打包过程中,Browserify会将我们认为在全局范围内的代码放入一个新的模块中,因此它无法访问全局变量_? - Lyubomir

2

尝试在你的js文件中使用global.hello = function() { alert("hello");},然后使用browserify构建它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接