【发布时间】:2017-05-07 09:17:25
【问题描述】:
假设的遗留场景:
假设我有 4 个脚本,它们简单地连接在一起作为单个脚本进行部署,以在浏览器中提供一个具有全局命名空间的实用程序库。 然后,我有 1 个使用该库的单独应用程序脚本。 比如:
<script src="library.js"></script>
<script src="app.js"></script>
在我的 app.js 脚本中,通过其命名空间调用库方法,例如
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 模块?当然,这不是一个独特的场景。
【问题讨论】:
-
我不使用 webpack,但是使用
jspm或rollup可以将脚本构建为 UMD,因此可以通过特征检测将其用作全局、AMD 和 Commonjs。
标签: javascript node.js browser integration legacy