javascript - 如何在浏览器中将遗留 JavaScript 与 NodeJS 集成

标签 javascript node.js browser integration legacy

假设的遗留场景:

假设我有 4 个脚本,它们只是连接在一起作为单个脚本进行部署,以在浏览器中提供具有全局命名空间的实用程序库。 然后我有 1 个利用该库的单独应用程序脚本。 像这样的东西:

<script src="library.js"></script>
<script src="app.js"></script>

在我的 app.js 脚本中,通过其 namespace 调用库方法,例如

var id = lib.id(prefix);

我发现 4 个库脚本中有 1 个是一个有用的实用程序,我想将其转换为 Node 模块。我复制它并创建一个包并将其发布到 npm 以在新开发中使用。

问题:现在我需要维护该脚本的两个版本 - 一个用于 Node,另一个用于遗留库。

有没有一种方法可以让我可以将一个通用文件包含在 Node 模块和旧库中?或者我是否必须维护该文件的两个版本,直到我们逐步淘汰旧代码?

其他信息:

我查看了 browserify 和 webpack,认为它们可能有用,但两者都遇到了我不知道如何解决的问题。除非最终模块定义了全局变量,否则我无法在遗留代码中使用该模块,因为没有可用的 require 命令。换句话说,我无法浏览 Node 模块,然后将其放入旧版网页并在现有的 app.js 中使用它,因为我无法调用 var mymodule = require('mymodule')。有没有办法让 browserify 或 webpack 定义并公开 require 函数,让我从遗留代码库访问我的新 Node 模块?当然,这不是一个独特的情况。

最佳答案

你最好的选择是使用 UMD pattern确保该模块既可以用作全局系统,也可以在 commonJS(即 Node )系统中使用。

最适合您的模式是 returnExports 。这确保了所有导出的属性要么应用于全局对象(即窗口),要么应用于 Node 中的模块对象。

由于您没有使用 AMD,因此您可以稍微简化该模式并删除第 18 行和第 42 行的 if 语句的第一 block 。

这将要求您重新组织代码以使其符合模式。

您还可以使用其他模式,例如 commonJsStrictGlobal ,但我个人更喜欢 returnExports。

关于javascript - 如何在浏览器中将遗留 JavaScript 与 NodeJS 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271419/

相关文章:

安卓浏览器 : Is it possible to have a custom zoom level for my web page?

java - JxBrowser相关

javascript - 使用代码了解 JavaScript 中的响应式扩展

javascript - 为什么我在尝试过滤电影 release_date 时变得不确定?

javascript - react : timing ajax request in render()

javascript - 如何使用 Jasmine 对 $scope.broadcast、$scope.$on 进行单元测试

数组内的 Javascript 数组不起作用

javascript - 将两张图片合二为一

javascript - 无法包含 jade 文件

javascript - React.js 应用程序是否会根据请求完全传送到浏览器?