Angular 2 + Zone.js + Common js 模块:IF 语句异常,即使 false 情况下也会执行代码

2024-02-14

我尝试了很多检查。这绝对是一个异常现象。我有一个 Angular 2 服务加载@type定义 (typescript 2) 依次加载 common.js 模块 (视觉媒体/调试 https://stackoverflow.com/a/39666118/1903781)。在 common.js 模块内,我有一个简单的 if 语句,即使条件为 false 并且不应执行代码,该语句也会触发错误。 Angular 应用程序使用system.js加载模块。

常规代码 if (false) { console.log('This code is not executed') }正常行为,没有任何反应

异常代码: if (false) { exports.humanize = require('ms'); }它触发Error: zone.js:101 GET http://localhost:8002/ms.js 404 (Not Found)

错误本身是有效的。事实上,这个脚本是找不到的。最大的错误在于它从一开始就不应该出现。它应该被 false if 条件阻止。在我看来,这zone.js即使情况为假,也会以某种方式解析指令。我可以做什么来避免这种情况?我需要检查是否需要一个路径或另一个路径,具体取决于服务器或前端是否调用相同的脚本。

CJS 模块内部的大图:

// Trying to detect if environment is node.js
// In backend (no zones) everything works as expected
// In frontend, the require('ms') statement is executed event if condition is false. 
// I checked manually if process is defined, it's not. 
// Event the basic `false` condition also fails to block code.
if (typeof process === 'undefined') { 
    exports.humanize = require('node_modules/ms/index.js');
    console.log('Browser');
} else {
    exports.humanize = require('ms'); // If I comment this code works as intended
    console.log('Node');
}

你用systemjs吗?我在多行注释块中的导入语句中遇到了类似的情况。 SystemJS 使用正则表达式来检测 import 语句。也许它使用相同的方法来检测导出语句。

这在 zone.js 中不是问题,因为 zonejs 只是执行任务。任务本身是在其他地方触发的。

编辑(评论的答案):

我认为您不应该有条件地执行导出语句。

也许这有帮助:

var myExport;
var myRequired;

if (something) {
  myExport = function() {
    console.log('exported this');
  };
  myRequired = require('something');
}
else {
  myExport = function() {
    console.log('exported something else');
  };
  myRequired = require('something-else');
}

exports.myExport = myExport;
exports.someMore = myRequired;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 + Zone.js + Common js 模块:IF 语句异常,即使 false 情况下也会执行代码 的相关文章

  • angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

    有人可以解释 angular copy 和 JSON parse JSON stringify 之间的区别吗 有吗 您会推荐使用什么 angular fromJson angular toJson 与 JSON parse JSON str
  • Atom“自动完成”不起作用

    因此 当您安装 Atom 时 autocomplete 会随其一起提供 并且默认情况下处于启用状态 当我编写代码时 什么也没有显示 为什么 是否需要配置任何文件才能正常工作 In autocomplete plus settings pag
  • jquery/javascript 处理后移至命名锚点

    在进行一些 jquery 处理后 如何将焦点移动到同一页面上的不同部分 名为锚点 函数 ABC 进行一些处理 然后 我需要将用户移动到同一页面上的某个部分 页面下方 您可以使用下面的代码将屏幕滚动到 div 只需更改选择器以匹配您要滚动到的
  • 如何使用 jquery 从 iframe 内部滚动?

    我正在使用一个 Shadowbox 它生成一个 iframe 以在页面上显示产品详细信息 由于详细信息页面可能相当长 因此客户端需要一个 更多 按钮来向下滚动页面 显然 iframe 右侧的滚动条还不够 这是我为了让 iframe 滚动而尝
  • KineticJS - 将舞台缩放到视口

    我正在努力将默认分辨率设置为 1366x756 我会根据视口来放大和缩小它 类似于此处显示的示例 http blogs msdn com b davrous archive 2012 04 06 modernizing your html5
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • 注解和装饰器有什么区别?

    我很困惑何时使用术语注释以及何时使用装饰器 Component selector tabs template export class Tabs 装饰器对应于在类上调用的函数 而注释是使用 Reflect Metadata 库在类上设置的
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • Rails - 使链接与 ajax 一起工作

    我有一个链接 应该使用 ajax 加载它旁边的部分内容 而无需重新加载页面 链接在这里 这是链接应该转到的控制器 class ProfilesController lt ApplicationController def profile f
  • 为什么严格模式下不允许使用八进制数字文字(解决方法是什么?)

    为什么八进制数字文字不允许JavaScript 严格模式 https developer mozilla org en docs Web JavaScript Reference Strict mode 有什么害处呢 use strict
  • 如何在 svelte 中制作搜索过滤器

    我有两个组件在组件树中距离很远 我对如何在两者之间进行通信存有疑问 我有搜索组件 listItems 和商店 商店 svelte
  • 如何检查摘要周期是否稳定(又名“Angular 完成编译了吗?”)

    tl dr 最初的问题是 如何在每个摘要周期触发回调 但潜在的问题更有趣 因为这回答了两个问题 所以我继续修改了标题 Context 在解决了所有依赖项 nginclude API 调用等之后 我试图控制 Angular 何时完成 HTML
  • 可选链接在 create-react-app 中不起作用

    In a create react app项目 我正在使用 babel plugin proposal optional chaining在我的 babelrc中 但是 我有这个错误 Module parse failed Unexpect
  • 如何修复 AJAX 在选中复选框时始终触发?

    有时这个 AJAX 会触发 有时不会 让我解释一下 habit js document ready function habit check change function habit this parent siblings habit
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • 如何在 Angular 2 中订阅 DOMContentLoaded 事件?

    我正在将 UI 主题从 Angular 1 移植到 Angular 2 在第 1 个版本中 我有 viewContentLoaded事件 我想将其重新制作为 Angular 2 我正在尝试使用 HostListener DOMContent
  • addEventListener keydown 不起作用

    我在互联网上找到了一些基本的 Pong 代码 并尝试添加按键 代码在这里 http cssdeck com labs ping pong game tutorial with html5 canvas and sounds http css
  • 截断段落前 100 个字符并隐藏段落的其余内容,以通过更多/更少链接显示/隐藏其余内容

    我有一个超过 500 个字符的段落 我只想获取最初的 100 个字符并隐藏其余部分 我还想在 100 个字符旁边插入 更多 链接 单击更多链接时 整个段落应显示并编辑文本 更多 到 更少 单击 更少 时 它应切换行为 段落是动态生成的 我无

随机推荐

  • Chrome 加载第一个 AJAX 响应速度很慢

    我正在使用 React 和 Flux 构建一个应用程序 单击项目列表会启动一个操作 然后使用以下命令启动 通过效果 AJAX 请求axios 虽然我已经尝试过superagent bluebird promise具有相同的结果 问题是 使用
  • 如何杀死 iPhone 中后台运行的应用程序?

    我只是想知道如何杀死 iPhone 中的后台进程 应用程序 就像在 Auto Lock SBSettings 中一样 进程 切换能够列出所有后台进程并允许用户杀死其中的任何进程 提前致谢 感谢 refulgentis Chuck 的快速回复
  • 设置 BOOL 属性的正确方法

    我想在类初始值设定项中设置一个 BOOL 属性 property assign nonatomic BOOL isEditMode id init self setValue NO forKey isEditMode return self
  • 如何隐藏 Chrome“在调试器中暂停”覆盖层?

    Chrome 的一些半新更新现在在断点处暂停时在我的网页上放置了一个叠加层 此时 我特别尝试查看页面标记的状态 而叠加层正好隐藏了我想要看到的内容 有没有办法关闭这个标记 或者有没有办法将 Chrome 恢复到没有此错误功能的版本 现在 I
  • 放置Database.SetInitializer的地方

    我正在开发一个项目 该项目最终可能会出现多个 UI 版本 变体 但到目前为止 我的解决方案 Web 中有两个子项目 包含带有 ASP NET MVC 的 Web 界面 服务项目是我定义数据库上下文和模型的地方 我的目标是在我的 Web 项目
  • iPhone:键盘挡住屏幕[重复]

    这个问题在这里已经有答案了 可能的重复 UITableView和键盘滚动问题 https stackoverflow com questions 594181 uitableview and keyboard scrolling issue
  • 相当于 Matlab 的“randsample”随机样本

    Java中有没有类似的函数randsample在Matlab中 它可以返回加权样本 随机均匀采样并放回 并且具有权重 w i 对于每个数字 选择数字 i 的概率是 w i sum w 我想用这样的东西 randsample 0 1 1 tr
  • 如何将 Vuetify 选项卡与 vue-router 一起使用

    我有以下内容jsfiddle https jsfiddle net jjloneman e5a6L27u 12 有两个 Vuetify 选项卡 该文档没有显示使用示例vue router跟他们 我找到了这个Medium com 帖子 htt
  • Docker Rails mysql 未连接

    我正在尝试将主机上的 Rails 应用程序连接到 docker mysql 映像 但我收到此错误 Authentication plugin caching sha2 password cannot be loaded dlopen usr
  • 如何使用 Python 将新列附加到 CSV 文件? [复制]

    这个问题在这里已经有答案了 我在一个数组中存储了一组四个数字 我想将其添加到 分数 列下的 CSV 文件中 with open Player csv ab as csvfile fieldnames Score writer csv Dic
  • 有没有办法可以从包含代码的字符串动态定义谓词主体?

    这可能是一个愚蠢的问题 但就这样吧 我希望能够从数据库 VARCHAR 列或任何字符串解析的字符串动态构造谓词 例如 假设数据库中的列包含以下字符串 return e SomeStringProperty Contains foo 这些代码
  • MySQL 存储函数创建错误 ERROR 1064 & 1327

    我正在使用 MySQL v5 1 36 我正在尝试使用此代码创建一个存储函数 DELIMITER CREATE FUNCTION modx getSTID x VARCHAR 255 RETURNS INT DETERMINISTIC BE
  • 为视图控制器设置插座/操作

    我有一个UIButton在不是我的应用程序中的根视图控制器的视图控制器中 我无法在头文件中拖动并为其创建插座或操作 我只能从根视图控制器执行此操作 这有一个简单的原因吗 使用故事板时 XCode 仅为第一个视图控制器 名为 ViewCont
  • CSS 同步转换

    您好 有一个在 hover 上打开的菜单 当我将鼠标悬停到下一个元素时 它会等待一会儿 我希望两个过渡同时产生手风琴效果 我缺少什么 Fiddle http jsfiddle net jSBf3 css ul border 2px soli
  • 全屏查看 ionic 移动应用程序

    我有一个离子移动应用程序 我在移动浏览器上运行 它有一个静态标头 即使向下滚动 我也需要隐藏该网络应用程序的地址栏 但这不会发生 它有一个标题如下 它在本机移动浏览器上运行 我使用控制台构建了应用程序 所以请帮助我隐藏地址 标题栏并像 Fa
  • 在Python中将pdf转换为text/html以便我可以解析它

    我有以下示例代码 我从欧洲议会网站下载了有关给定立法提案的 pdf 文件 编辑 我最终得到了链接并将其提供给 adobes 在线转换工具 请参阅下面的代码 import mechanize import urllib2 import re
  • 在android中,如何从代码更改Daydream的设置?

    我想编写一个可以更改白日梦设置的应用程序 需要将我自己的梦想设置为已选择 并将何时播放选项设置为 任一 sdk 19版本可以实现这个功能吗 如果你想为用户设置白日梦 则不能这样做 但是 您可以在正确的位置打开系统设置 以便用户可以从已安装的
  • parentElement.parentElement.parentElement...替代方案?

    我需要从所有 HTML 元素内部的按钮执行的函数中访问 HTML 元素中最外部 div 的 id 我在用着e target parentElement parentElement parentElement parentElement pa
  • 将自定义 php.ini 传递给 phpunit

    如何将自定义 php ini 传递给 phpunit 源码使用的是 get cfg var 代替 ini get 所以不幸的是它不使用 ini set d 选项等设置的值 现在传递该值的唯一方法是使用额外的 php ini 我如何将其传递到
  • Angular 2 + Zone.js + Common js 模块:IF 语句异常,即使 false 情况下也会执行代码

    我尝试了很多检查 这绝对是一个异常现象 我有一个 Angular 2 服务加载 type定义 typescript 2 依次加载 common js 模块 视觉媒体 调试 https stackoverflow com a 39666118