Javascript 在运行时使用requirejs退出优化代码

Javascript 在运行时使用requirejs退出优化代码,javascript,requirejs,Javascript,Requirejs,我们正在考虑将我们的(大型)web应用程序与require js集成 目前,我们为生产优化(连接和缩小)js文件。在生产运行时的环境中,我们允许通过浏览器秘密输入会话级别的“调试”标志。设置该标志后,浏览器将加载文件的非精简版本(通过使用razor代码中的if/else语句)以进行调试 在使用requirejs时,是否有一种等效的可能机制 总之,;我们希望使用requirejs在运行时使用优化的js文件。我们还希望能够基于会话状态调试标志在运行时加载非精简文件 提前感谢,, -马克 我们希望使用

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

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

在使用requirejs时,是否有一种等效的可能机制

总之,;我们希望使用requirejs在运行时使用优化的js文件。我们还希望能够基于会话状态调试标志在运行时加载非精简文件

提前感谢,, -马克

我们希望使用requirejs在运行时使用优化的js文件。我们还希望能够在运行时加载非精简文件

这最好通过使用来实现。如果存在缩小文件的源映射,则浏览器可以使用它将缩小后的代码动态转换回原始版本,而不必存在实际的原始代码

缩微器可以选择生成源地图和缩微代码。RequireJS优化器afaik使用Uglify2生成源映射

源映射很好,尤其是在预生产环境中。如果要禁用此功能(如在生产中),请不要部署源映射文件

在生产运行时的环境中,我们允许通过浏览器秘密输入会话级别的“调试”标志

顺便说一下,这是个糟糕的主意。这种设置只不过是开销和代码的简陋


如果您确实坚持加载原始源代码进行调试,加载编译版本进行生产,那么只需将编译后的脚本与未编译代码的入口点脚本交换即可。这假设您在服务器上同时拥有原始版本和编译版本

在下面的示例(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; ?>

但是,请注意,原始源代码的行为可能与编译的源代码不同。迷你们往往会走意外的捷径,并对代码进行假设。这可能会导致原始版本和编译版本的行为不同

我们希望使用requirejs在运行时使用优化的js文件。我们还希望能够在运行时加载非精简文件

这最好通过使用来实现。如果存在缩小文件的源映射,则浏览器可以使用它将缩小后的代码动态转换回原始版本,而不必存在实际的原始代码

缩微器可以选择生成源地图和缩微代码。RequireJS优化器afaik使用Uglify2生成源映射

源映射很好,尤其是在预生产环境中。如果要禁用此功能(如在生产中),请不要部署源映射文件

在生产运行时的环境中,我们允许通过浏览器秘密输入会话级别的“调试”标志

顺便说一下,这是个糟糕的主意。这种设置只不过是开销和代码的简陋


如果您确实坚持加载原始源代码进行调试,加载编译版本进行生产,那么只需将编译后的脚本与未编译代码的入口点脚本交换即可。这假设您在服务器上同时拥有原始版本和编译版本

在下面的示例(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; ?>


但是,请注意,原始源代码的行为可能与编译的源代码不同。迷你们往往会走意外的捷径,并对代码进行假设。这可能会导致原始版本和编译版本的行为不同

感谢您建议我们使用源地图。我个人不希望使用它们进行调试,原因如下:*并非所有浏览器都支持。我们的应用程序在较旧的浏览器中运行。*函数名在调用堆栈中是混乱的,不可读。*在大多数浏览器中,即使使用源映射,局部变量名称仍然混乱不堪。我仍然好奇,按照我在最初的问题中的要求去做会有多容易。谢谢。谢谢你建议我们使用源地图。我个人不希望使用它们进行调试,原因如下:*并非所有浏览器都支持。我们的应用程序在较旧的浏览器中运行。*函数名在调用堆栈中是混乱的,不可读。*在大多数浏览器中,即使使用源映射,局部变量名称仍然混乱不堪。我仍然好奇,按照我在最初的问题中的要求去做会有多容易。非常感谢。