2015-07-19 43 views
1

有人能告诉我我做错了什么吗?客户端节点模块在浏览后不工作

我想在node.js下开发一个应用程序。我需要一个名为自动完成的模块,所以我做了

npm install -S autocomplete 

并且工作正常。 packages.json已更新,一切。

但我需要客户端的自动完成功能。这个问题最流行的解决方案似乎是使用browserify,所以我安装了这个全球性的,它似乎工作。

现在,根据一切我读过,我应该能够:

cd node_modules 
browserify autocomplete/index.js > bundle.js 
mv bundle.js ../public/lib/js/ 

,然后在视图/ index.html的我应该能有

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

最后我应该可以说

var auto = new Autocomplete(); 

因为自动完成对象的自动完成模块中定义,这就是个如何e说明说实例化它。

但不幸的是我的浏览器说Autocomplete is not defined所以它显然没有得到消息。

上述有什么问题?

回答

0

因此,事实证明,因为自动完成未导出到全局范围。在app.js在您使用自动填充文件中 试试这个,例如:

var Autocomplete = require('autocomplete'); 
var auto = new Autocomplete(); 

然后

browserify app.js > bundle.js 
mv bundle.js ../public/lib/js/ 
+0

感谢您的回复,但不幸的是,这对我不起作用,因为客户端没有定义“require”。这是另一个我知道已经写了很多东西的问题,但到目前为止我还没有找到解决方案!如何定义客户端使用的“require”? – nttaylor

+0

browserify将递归分析应用程序中的所有require()调用,以便构建一个可在单个

1

当您运行Browserify,将其创建为standalone模块:

browserify autocomplete/index.js --standalone Autocomplete > autocomplete.js 

我只是为了简单而改变名称 - 随便称它。

然后,当您在浏览器中运行此应用程序时,应该可以使用new Autocomplete()

编辑 虽然这是可行的,但该模块的文档已丢失,而您正在阅读文档的模块似乎已丢失。

当您可以使用已为浏览器构建的typeahead之类的东西时,不需要去解决这个问题。

+1

谢谢你这个工作!我有点惊呆了,在阅读有关browserify的几个小时内,我从未读过关于“standstand”标志的消息。我想通常不需要?你能告诉我什么是不同的“自动完成”,它是必要的? – nttaylor

+0

任何时候一个模块只使用'module.exports',那么浏览器就不知道该模块被调用了什么。这就是'--standalone'为你做的。我现在正在用同样的东西建立一个图书馆。随时upvote :) –

+0

嗨,不幸的是,即使我能够使用你的解决方案实例化对象,调用对象的方法给了另一个错误。我实例化了'auto = new Autocomplete()',但后来'auto.initialize(data)'产生了'Uncaught TypeError:getInitialElements不是函数'。有什么想法吗? – nttaylor

相关问题