fabric.jsv2でjspmバンドルを作成する方法

ダニエル・ケルナー

私はfabric.jsバージョン2を含むJSPMでjavascriptバンドルを作成しようとしています。残念ながら、jspmバンドルの実行は失敗します。

$ jspm bundle src/main --minify --inject
       Building the bundle tree for src/main...

err  Error on fetch for @empty/lib/jsdom/living/generated/utils.js at file:///Users/dkoerner/projects/JSPMFabricTestCase/@empty/lib/jsdom/living/generated/utils.js
    Loading npm:[email protected]/dist/fabric.js
    Loading npm:[email protected]
    Loading src/bootstrap.js
    Loading src/main.js
    Error: ENOENT: no such file or directory, open '/Users/dkoerner/projects/JSPMFabricTestCase/@empty/lib/jsdom/living/generated/utils.js'

jspmとファブリックの例に従ってテストプロジェクト(https://github.com/dkoerner85/JSPMFabricTestCase)を作成し、バンドルの作成が現在のファブリック安定版リリースv1.7.22で機能することを確認しました。ただし、バージョンをリリース候補v2.0.0-rc4に上げると、バンドルが壊れます。

私はjavascriptアプリの開発にかなり慣れていないため、これが失敗する理由とその修復方法を理解していません。ポインタや説明に感謝します。

npm:v5.5.1ノード:v8.9.3

ダニエル・ケルナー

解決

プロジェクトにオーバーライドセクションを追加しますpackage.json

"overrides": {
  "npm:[email protected]": {
    "map": {
      "canvas": "@empty",
      "fs": "@empty",
      "jsdom/lib/jsdom/living/generated/utils": "@empty",
      "jsdom/lib/jsdom/utils": "@empty",
      "jsdom": "@empty",
      "http": "@empty",
      "https": "@empty",
      "xmldom": "@empty",
      "url": "@empty"
    }
  }
}

インサイト

jspmとsystemJSについて読んだ後、私はこの問題の解決策を見つけました。重要なコードは、ファブリックパッケージのfabric.jsファイルとpackage.jsonファイルにあります。

dist /fabric.js

...
fabric.document = require('jsdom').jsdom(decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),{ features: {FetchExternalResources: ['img']}});
fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;
fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;
fabric.window = fabric.document.defaultView;
DOMParser = require('xmldom').DOMParser;
...

package.json

...
"browser" : {
   "canvas": false,
   "fs":      false,
   "jsdom":   false,
   "jsdom/lib/jsdom/living/generated/utils": false,
   "jsdom/lib/jsdom/utils": false,
   "http":   false,
   "https":   false,
   "xmldom":  false,
   "url": false
},
...

これで、でパッケージをインストールするとjspm install npm:[email protected]、jspmはrequireステートメントを変更し、次のコードになります。

jspm_packages/npm/[email protected]/dist/fabric.js

...
fabric.document = require('@empty').jsdom(decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'), {features: {FetchExternalResources: ['img']}});
fabric.jsdomImplForWrapper = require('@empty/lib/jsdom/living/generated/utils').implForWrapper;
fabric.nodeCanvas = require('@empty/lib/jsdom/utils').Canvas;
fabric.window = fabric.document.defaultView;
DOMParser = require('@empty').DOMParser;
...

バンドルを作成しようとすると、jspmは'@empty/lib/jsdom/living/generated/utils'requireステートメントに遭遇します。

Error: ENOENT: no such file or directory, open '/Users/dkoerner/projects/JSPMFabricTestCase/@empty/lib/jsdom/living/generated/utils.js'

jspmは、jsdom最初エントリをの必要に応じて処理package.jsonしたため、より詳細なエントリを認識できませんでした'jsdom/lib/jsdom/living/generated/utils'マップを正しい順序で提供する必要があります-短いパスの前に長いパス。

これは、上記のソリューションに示されているように、ローカルオーバーライドを使用して実現できます。元のとは対照的に、オーバーライドでjsdom以下@empty/lib/jsdom/living/generated/utils順序付けられていることに注意してくださいpackage.json

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Hyperledger Fabric:フロントエンドを作成する方法は?

分類Dev

キャンバスで画像をfabric.jsに保存する方法

分類Dev

Fabric.jsで描画を停止する方法

分類Dev

Fabric.jsでキャンバスパンを実装する方法

分類Dev

mozzilaでfabric.jsキャンバスマウス座標を取得する方法

分類Dev

fabric-sdk-nodeでProposalResponsePayloadをデコードする方法

分類Dev

Fabric.jsでTIFF画像をロードする方法は?

分類Dev

Fabric.JSで.animateメソッドの中断を回避する方法

分類Dev

Service Fabric Autofacの方法は?

分類Dev

fabric.jsでポリラインを測定する方法は?

分類Dev

Fabric8:OSGiバンドル内の現在のプロファイルを取得する

分類Dev

キャンバスに背景画像を設定する(fabric js)

分類Dev

PythonでFabricを直接呼び出す

分類Dev

Fabricを使用してすべてのサーバーでコマンドを実行する

分類Dev

FabricとFirebaseCrashlyticsを同時に使用する

分類Dev

FabricをFirebaseに完全に移行する

分類Dev

fabric.jsキャンバス内のsvgファイルを操作する

分類Dev

Fabric Composer Playground のローカル モードを有効にする方法は?

分類Dev

React Fabric-UIのコマンドバーにペルソナコンポーネントを表示するにはどうすればよいですか?

分類Dev

office-ui-fabric-jsを使用してChoiceFieldGroupを作成すると、KnockoutJSバインディングが失敗する

分類Dev

Hyperledger Fabric:ログをトリミングする方法は?

分類Dev

Fabric.jsでポリゴンポイントを取得する方法

分類Dev

Fabric.ioでCrashlyticsを初期化する方法は?

分類Dev

Azure Service Fabric のルーティング

分類Dev

React Native Fabric Digits を Android にインストールする

分類Dev

Jenkinsdockerコンテナでfabric8docker-maven-pluginを使用する

分類Dev

Hyperledger-fabric開発環境用のノードjsをインストールする方法は?

分類Dev

Kubernetes + Docker + AWS = Azure + Service Fabricですか?

分類Dev

Hyperledger FabricにはDockerが必要ですか?

Related 関連記事

  1. 1

    Hyperledger Fabric:フロントエンドを作成する方法は?

  2. 2

    キャンバスで画像をfabric.jsに保存する方法

  3. 3

    Fabric.jsで描画を停止する方法

  4. 4

    Fabric.jsでキャンバスパンを実装する方法

  5. 5

    mozzilaでfabric.jsキャンバスマウス座標を取得する方法

  6. 6

    fabric-sdk-nodeでProposalResponsePayloadをデコードする方法

  7. 7

    Fabric.jsでTIFF画像をロードする方法は?

  8. 8

    Fabric.JSで.animateメソッドの中断を回避する方法

  9. 9

    Service Fabric Autofacの方法は?

  10. 10

    fabric.jsでポリラインを測定する方法は?

  11. 11

    Fabric8:OSGiバンドル内の現在のプロファイルを取得する

  12. 12

    キャンバスに背景画像を設定する(fabric js)

  13. 13

    PythonでFabricを直接呼び出す

  14. 14

    Fabricを使用してすべてのサーバーでコマンドを実行する

  15. 15

    FabricとFirebaseCrashlyticsを同時に使用する

  16. 16

    FabricをFirebaseに完全に移行する

  17. 17

    fabric.jsキャンバス内のsvgファイルを操作する

  18. 18

    Fabric Composer Playground のローカル モードを有効にする方法は?

  19. 19

    React Fabric-UIのコマンドバーにペルソナコンポーネントを表示するにはどうすればよいですか?

  20. 20

    office-ui-fabric-jsを使用してChoiceFieldGroupを作成すると、KnockoutJSバインディングが失敗する

  21. 21

    Hyperledger Fabric:ログをトリミングする方法は?

  22. 22

    Fabric.jsでポリゴンポイントを取得する方法

  23. 23

    Fabric.ioでCrashlyticsを初期化する方法は?

  24. 24

    Azure Service Fabric のルーティング

  25. 25

    React Native Fabric Digits を Android にインストールする

  26. 26

    Jenkinsdockerコンテナでfabric8docker-maven-pluginを使用する

  27. 27

    Hyperledger-fabric開発環境用のノードjsをインストールする方法は?

  28. 28

    Kubernetes + Docker + AWS = Azure + Service Fabricですか?

  29. 29

    Hyperledger FabricにはDockerが必要ですか?

ホットタグ

アーカイブ