客户端节点上:未捕获ReferenceError:require未定义

所以,我正在用node / express + jade组合编写一个应用程序。

我有客户端加载的client.js 。 在那个文件中,我有从其他JavaScript文件调用函数的代码。 我的尝试是使用

 var m = require('./messages'); 

为了加载messages.js的内容(就像我在服务器端做的那样),然后在那个文件中调用函数。 但是,在客户端没有定义require ,并且它引发了Uncaught ReferenceError: require is not definedforms的错误Uncaught ReferenceError: require is not defined

这些其他的JS文件也在客户端的运行时加载,因为我把链接放在网页的头部。 所以客户端知道从这些其他文件导出的所有function。

如何从打开套接字到服务器的主client.js文件中的这些其他JS文件(如messages.js )调用这些函数?

这是因为require()在浏览器/客户端JavaScript中不存在。

现在你将不得不做一些关于客户端JavaScript脚本pipe理的select。

你有三个select:

  1. 使用<script>标签。
  2. 使用CommonJS实现。 像Node.js这样的同步依赖关系
  3. 使用AMD实现。

CommonJS客户端实现包括:

(其中大部分需要在部署之前进行构build)

  1. Browserify – 您可以在浏览器中使用大多数Node.js模块。 这是我个人的最爱。
  2. 组件 – 重点在于简单。 仅浏览器。 由制作Express.js(最stream行的Node.js Web框架)的同一个人制作。
  3. Webpack – 一切(捆绑JS,CSS等)。 受到React.js浪潮的欢迎。 臭名昭着的学习曲线。
  4. 汇总 – 新的竞争者。 利用ES6模块。 包含树状结构(删除未使用的代码)。

你可以阅读更多关于我的比较的Browserify与组件 。

AMD的实施包括:

  1. RequireJS – 在客户端JavaScript开发人员中非常stream行。 不是我的味道,因为它的asynchronous性。

请注意,在searchselect哪一个,你会阅读关于鲍尔 。 Bower仅用于软件包依赖关系,并且不受CommonJS和AMD等模块定义的限制。

希望这有助于一些。

编辑(2016-01-16)

增加了webpackrollup 。 我认为可以肯定的是,在2016年,最好避免component 。 我最终会从列表中删除它。

Interesting Posts