javascript - 在运行时使用 require js 切换出优化代码

标签 javascript requirejs

我们正在考虑将我们的(大型)网络应用程序与 require js 集成。

目前,我们优化(连接和缩小)我们的 js 文件以用于生产。在我们的生产运行时环境中,我们允许 session 级“调试”标志,可以通过浏览器 secret 输入该标志。设置该标志后,浏览器将加载文件的非缩小版本(通过使用 razor 代码中的 if/else 语句)进行调试。

使用 require js 时是否有等效的可能机制?

总而言之;我们希望通过 require js 在运行时使用优化的 js 文件。我们还希望能够根据 session 状态调试标志在运行时加载非缩小文件。

提前致谢, -马克

最佳答案

we would like to use optimized js files at runtime using require js. We would also like the ability to load non-minified files at runtime

最好使用 source maps 来完成此操作反而。如果缩小文件存在源映射,则浏览器可以使用它将缩小代码即时转换回原始版本,而无需提供实际的原始代码。

压缩器可以选择生成源映射以及压缩代码。 RequireJS 优化器,afaik,使用 Uglify2,它可以生成源映射。

源映射非常好,尤其是在预生产环境中。如果您想禁用此功能(例如在生产中),只需不要部署源映射文件即可。

In our environment at production runtime, we allow for a session level "debug" flag that can be secretly entered via the browser.

顺便说一句,这是一个糟糕的主意。这种设置只是开销和代码粗糙。

<小时/>

如果您确实坚持加载用于调试目的的原始源代码和用于生产的编译版本,您可以简单地将已编译的脚本与未编译代码的入口点脚本交换。这假设您在服务器上拥有原始版本和编译版本。

在以下示例 (PHP) 中,假设 main.js 是原始源代码的入口点脚本,main.min.js 是编译版本,并且 $debug 是一些值,告诉服务器您正在使用什么模式,您可以简单地执行以下操作:

<script src="path/to/require.js"></script>

<? if($debug): ?>
<script src="path/to/main.js"></script>
<? else: ?>
<script src="path/to/main.min.js"></script>
<? endif; ?>

但是请注意,原始源代码的行为可能与编译后的源代码不同。缩小器倾向于采取意想不到的捷径并对代码做出假设。这可能会导致原始版本和编译版本的行为不同。

关于javascript - 在运行时使用 require js 切换出优化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408283/

相关文章:

node.js - 是否可以在测试中设置 amdefine 以便我不必在所有模块文件中定义它?

javascript - 有没有办法用 RequireJS 延迟设置资源的路径?

angularjs - 带有 angularJS 的简单 requireJS - Angular 未定义

JavaScript 实例级装饰器

javascript - JavaScript新手需要将Celsius转换为Fahrenheit和Kelvin,为什么我的代码无法正常工作?

javascript - map 上的 MouseClick 事件并使用 OpenLayers 2 使圆圈出现

javascript - 在 JavaScriptCore 中加载 AMD 模块

javascript - 无法读取未定义的属性 'View'

javascript - ES6。从外部类访问类变量

javascript - (obj || {}) 与对象(obj)