2016-08-29 8 views
0

THREE.jsを依存関係とするモジュールを構築しています。私は、依存関係としてTHREEを含める最も良い方法を試して、モジュールとモジュールのユーザーがアクセスできるようにしています(ユーザーはプロジェクト内でTHREEライブラリにアクセスする必要があります)。私はこの作品を作る考え出した2つの方法があります。ユーザーがnpmモジュールの依存バージョンを管理できるようにする

ワン:

、モジュールの依存関係としてTHREEの追加モジュールでライブラリ全体をインポートし、そのようなグローバル変数として追加します:ここ

import * as THREE from 'three'; 
window.THREE = THREE; 

欠点は、私が使用しているTHREEのバージョンの責任だということではありませんし、また、ライブラリ全体がインポートされていること(THREEは最近、モジュラービルドに切り替えたので、含まれるように、もはやneccessaryですライブラリ全体)。

は、ユーザーが自分のプロジェクトの依存関係として追加する必要がモジュールの依存関係としてTHREEを追加します。

import { Scene, Camera } from 'three'; 

そして、ユーザーはファイルサイズが小さく、その結果、彼らのプロジェクトに必要なものをインポートすることができます:ここでの考え方は、私は今私がプロジェクトから必要なものだけをインポートすることができるということです。

ここで問題となるのは、3つのコピーがインストールされていることです。これは潜在的に異なる互換性のないバージョンです。インストールされているバージョンの3つを管理できるように、モジュールをトップレベルのモジュールに向ける方法はありますか?

+0

は、あなたのモジュールに依存に渡すため、ユーザーが責任を作っています。あなたの側では、彼らがあなたに与えた 'three.js'を使用します。必要なモジュールを追加するのを忘れた場合は、エラーを返します。 – DrakaSAN

+0

これを今見てみると、モジュールに依存関係を渡す方法については空白が描かれています。何か提案はありますか? – looeee

+0

簡単な方法:あなたのモジュールにグローバル変数として配置し、それがライブラリであるかのように他の場所で使用するパラメータをとる "init"関数を公開します。そうでなければ、 'module.exports'全体を関数として設定し、そのパラメータをライブラリとして使用することで、require自体からパラメータを取得できるはずです。 – DrakaSAN

答えて

1

私はそれが行わ見てきた方法は、これに似ていますが、私は生産にそれのような何かをしなければならなかったことはありませんので、私は個人的にその強さの分からない:

main.js:

'use strict'; 
const three = require('three'), 
    mod = require('yourModule'); 

mod.init(three); 
//... 

yourModule.js:

'use strict'; 
let three = {}; 
function init(t) { 
    three = t; 
} 
//... 
modules.export = { 
    init: init 
    //... 
}; 

それとも

main.js:

'use strict'; 
const three = require('three'), 
    mod = require('yourModule')(three); 

yourModule.js:私はあなたに似た例で見てきた何

'use strict'; 
module.exports = (three) => { 
    //... 
}; 
+0

ありがとうございました - 私はこれを非常に簡単な方法で解決しました。私のモジュールの前に3つだけロードしてください: '' '3つの' ''からのTHREEをインポート そして '' 'ウィンドウ。THREE = THREE''' それから私は私のモジュールをロードし、グローバル変数が利用可能です。 あなたの提案をありがとうが、私はmodule.exportsが関数であるかもしれないことに気づいていませんでした。 – looeee

+0

ようこそ。あなたの答えが正しいとあなたに役立つと思う場合、あなたはそれが受け入れられたとマークすることができます。また、問題の解決方法を記述した独自の回答を投稿し、それを受け入れることもできます。あなたの答えが既存のものより優れているならば、それは面倒ではなく、さらには励まされます。それはまた、「無回答」リストから、多くの人々が有用な答えを持たない質問を探して閲覧するという質問を取り除きます。 – DrakaSAN

関連する問題