首页 > 解决方案 > 如何找出在 ember fastboot 中运行应用程序时发生错误的原因

问题描述

我正在尝试将第三方 npm 库(如 npm 包之类的编辑器npm i @editorjs/editorjs --save-dev)集成到具有自动加载功能的 ember 应用程序中"ember-auto-import": "^1.5.3",

没有快速启动一切正常,但在快速启动应用程序崩溃并出现以下错误:

nodejs_1      |  TypeError: Cannot read property 'syscall' of null
nodejs_1      |     at AppendOpcodes.evaluate (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:2003:1)
nodejs_1      |     at LowLevelVM.evaluateSyscall (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:4923:1)
nodejs_1      |     at LowLevelVM.evaluateInner (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:4879:1)
nodejs_1      |     at LowLevelVM.evaluateOuter (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:4871:1)
nodejs_1      |     at JitVM.next (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:5815:1)
nodejs_1      |     at TemplateIteratorImpl.next (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:5944:1)
nodejs_1      |     at RootState.render (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:8771:1)
nodejs_1      |     at runInAutotrackingTransaction (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/validator.js:106:1)
nodejs_1      |     at /tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:9069:1
nodejs_1      |     at inTransaction (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@glimmer/runtime.js:1959:1)
nodejs_1      |     at InertRenderer._renderRoots (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:9043:1)
nodejs_1      |     at InertRenderer._renderRootsTransaction (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:9104:1)
nodejs_1      |     at InertRenderer._revalidate (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:9146:1)
nodejs_1      |     at invokeWithOnError (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:347:1)
nodejs_1      |     at Queue.flush (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:229:1)
nodejs_1      |     at DeferredActionQueues.flush (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:426:1)
nodejs_1      |     at Backburner._end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:960:1)
nodejs_1      |     at Backburner.end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:710:1)
nodejs_1      |     at Backburner._run (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:1009:1)
nodejs_1      |     at Backburner._join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:989:1)
nodejs_1      |     at Backburner.join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:760:1)
nodejs_1      |     at Array.loopEnd (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:8888:1)
nodejs_1      |     at Backburner._trigger (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:1084:1)
nodejs_1      |     at Backburner._end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:979:1)
nodejs_1      |     at Backburner.end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:710:1)
nodejs_1      |     at Backburner._run (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:1009:1)
nodejs_1      |     at Backburner._join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:989:1)
nodejs_1      |     at Backburner.join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:760:1)
nodejs_1      |     at Array.loopEnd (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/-internals/glimmer/index.js:8888:1)
nodejs_1      |     at Backburner._trigger (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:1084:1)
nodejs_1      |     at Backburner._end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:979:1)
nodejs_1      |     at Backburner.end (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:710:1)
nodejs_1      |     at Backburner._run (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:1009:1)
nodejs_1      |     at Backburner._join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:989:1)
nodejs_1      |     at Backburner.join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/backburner.js:760:1)
nodejs_1      |     at Function.join (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/@ember/runloop/index.js:168:1)
nodejs_1      |     at Object.hash.success (/tmp/broccoli-1Awdijh61s6pE/out-475-append_ember_auto_import_analyzer/assets/addon-tree-output/@ember-data/adapter/rest.js:919:1)
nodejs_1      |     at fire (/app/node_modules/jquery-deferred/lib/jquery-callbacks.js:78:30)
nodejs_1      |     at Object.fireWith (/app/node_modules/jquery-deferred/lib/jquery-callbacks.js:188:7)
nodejs_1      |     at Object.fire [as resolve] (/app/node_modules/jquery-deferred/lib/jquery-callbacks.js:195:10)
nodejs_1      |     at dataHandler (/app/node_modules/najax/lib/najax.js:167:13)
nodejs_1      |     at IncomingMessage.<anonymous> (/app/node_modules/najax/lib/najax.js:198:9)
nodejs_1      |     at IncomingMessage.emit (events.js:322:22)
nodejs_1      |     at IncomingMessage.EventEmitter.emit (domain.js:482:12)
nodejs_1      |     at endReadableNT (_stream_readable.js:1187:12)
nodejs_1      |     at processTicksAndRejections (internal/process/task_queues.js:84:21)

fastboot模式检查就像this.fastboot.isFastBoot不能解决问题一样,即使我只是 import 看起来也会抛出错误@editorjs/editorjs。也许有人遇到过,所以准备好任何信息来获得挖掘的方向。

创建组件示例:

import Component from '@ember/component';
import EditorJS from '@editorjs/editorjs';
import { inject as service } from '@ember/service';
export default Component.extend({
   fastboot: service(),
   didInsertElement() {
   if (!this.fastboot.isFastBoot) {
     const editor = new EditorJS({
    holder: this.elementId
    });
   }
   }
});

环境

DEBUG: -------------------------------
index.js:194 DEBUG: Ember             : 3.18.0
index.js:194 DEBUG: Ember Data        : 3.17.0
index.js:194 DEBUG: jQuery            : 3.5.0
index.js:194 DEBUG: Ember Bootstrap   : 2.8.1
index.js:194 DEBUG: -------------------------------

更新:

看起来像第三方 npm 库中的问题,原因didInsertElement不应该在所有fastboot

作为解决方法,我将此库添加为incompatible JavaScript

app.import('vendor/fastboot-incompatible.js', {
  using: [
    {
      transformation: 'fastbootShim'
    }
  ]
});

看起来这种方法可以解决问题。但无论如何,这个问题仍然是我想了解崩溃原因的实际原因,在这个错误之后fastboot需要重新加载并且不能更多地工作。预期的行为 - 一些没有完全崩溃的错误。

标签: node.jsember.jsember-cliglimmer.jsember.js-fastboot

解决方案


推荐阅读