我正在使用 Node.js、Express.js 和 Jade 组合编写应用程序。
我有文件 client.js
,它加载在客户端上。在该文件中,我有从其他 JavaScript 文件调用函数的代码。我的尝试是使用
var m = require('./messages');
为了加载 messages.js
的内容(就像我在服务器端做的那样),然后从该文件中调用函数。但是,在客户端没有定义 require
,它会抛出 Uncaught ReferenceError: require is not defined
形式的错误。
这些其他 JavaScript 文件也在客户端运行时加载,因为我将链接放在网页的标题处。所以客户端知道从这些其他文件中导出的所有功能。
如何从打开服务器套接字的主 messages.js
文件中的这些其他 JavaScript 文件(例如 client.js
)调用这些函数?
原文由 MightyMouse 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是因为
require()
在浏览器/客户端 JavaScript 中不存在。现在,您将不得不对客户端 JavaScript 脚本管理做出一些选择。
你有三个选择:
使用
<script>
标签。使用 CommonJS 实现。它具有像 Node.js 这样的同步依赖项
使用 异步模块定义(AMD) 实现。
CommonJS 客户端实现包括(其中大多数在部署之前需要构建步骤):
Browserify - 您可以在浏览器中使用大多数 Node.js 模块。这是我个人的最爱。
Webpack - 做所有事情(捆绑 JavaScript 代码、CSS 等)。它因 React 的激增而流行起来,但因其难以学习的曲线而臭名昭著。
Rollup - 一个新的竞争者。它利用 ES6 模块并包括摇树功能(删除未使用的代码)。
您可以阅读更多关于我对 Browserify 与(已弃用)组件 的比较。
AMD 实施包括:
请注意,在您选择使用哪一个时,您将阅读有关 Bower 的信息。 Bower 仅用于包依赖项,对 CommonJS 和 AMD 等模块定义没有意见。