同じIIFEで実行するために2つ以上の別々のファイルでjavascriptコードを定義する必要はありますか?私はgulpのようなビルドツールを使ってこれを実現しています。複数のファイルにまたがるIIFE
ちょうどそのような平凡な問題のようです。私は自分のコードを整理して独自のファイルに分割したいと思っています(ところで、別々のノックアウトビューモデル)。しかし、私は彼ら全員が同じ機能で走り、地球を汚染しないようにしたい。
同じIIFEで実行するために2つ以上の別々のファイルでjavascriptコードを定義する必要はありますか?私はgulpのようなビルドツールを使ってこれを実現しています。複数のファイルにまたがるIIFE
ちょうどそのような平凡な問題のようです。私は自分のコードを整理して独自のファイルに分割したいと思っています(ところで、別々のノックアウトビューモデル)。しかし、私は彼ら全員が同じ機能で走り、地球を汚染しないようにしたい。
これを行う現代的な方法は、すべてをIIFEに入れようとするのではなく、モジュールを使用することです。現在、モジュールを使用するとは、RequireJS、SystemJS、Webpack、Browserifyなどのモジュールバンドラを使用することを意味します。中期的な将来、ブラウザで直接ES2015 +モジュールを使用したり、それらを1つのファイルにまとめます。 (あなたはバベルのようなtranspilersとES2015 +モジュール構文今日を使用することができますが、あなたはまだバンドラが必要です。)あなたは、現時点でRequireJSを使用しますが、そのdefine
機能を使用していない言及した
。イラストの目的のために、およそモジュールを定義する方法(私はRequireの構文のファンではありませんが、Babelを使用してES2015の構文をトランスペアレントにすることができます):
define("my-component", ["ko"], function(ko) {
// ...define the component...
// Return it
return MyComponent;
});
:
my-component
呼ばれる言うKOコンポーネントを定義モジュール名前)ko
(これはKnockoutを提供します)に依存しています。 define(["my-component", "another-component"], function(MyComponent, AnotherComponent) {
// use MyComponent and AnotherComponent here
});
:その依存関係は、あなたが私のアプリで次にモジュールで定義されたトップレベルのものとして、あなたのモジュールにMyComponent
を
簡単にするために、一般的にグループで使用される他のモジュールをグループ化してモジュールを作成することもできます。
my-component.js
:ES2015 +構文の代わりに
import ko from "./ko";
// ...define MyComponent...
export default MyComponent;
app.js
:
import MyComponent from "./my-component";
import AnotherComponent from "./another-component";
// ...use them...
は明らかに、両方の例は、非常にを簡素化しており、あなたが行うことができ、より多くのがあります。ありがとう!私はすべてのファイルをインポートするためにRequireJSを使用しています。私はdefine()関数を使用していません。純粋にjavascriptファイルをrequire()経由でブラウザに取り込むために使用しています。私はドキュメンテーションに相談して、これらのファイルをすべてIIFEに取り込もうとしましたが、短くなりました。 – smulz
@smulz:申し訳ありませんが、私はより明確にすべきでした。あなたは*すべてを1つのIIFEにまとめません。代わりに、モジュール内でものを定義し(グローバルを作成しないでください)、必要なものをあるモジュールから別のモジュールに引き出すために 'require'と' define'を使います(RequireJSの場合)。これらのバンドルには、ビルド時に依存関係ツリーを歩き回り、すべての依存関係を持つ単一ファイルを作成する(不要なグローバルを作成しない)ツールがあります。たとえば、IIFEでやっていることを行う現代的な方法は、モジュール*を代わりに使用することです。 –
@smulz:開発時に、バンドラーはファイルを個別に持ち込みますが、これは開発に便利です。パブリッシュする準備ができたら、ビルダーを実行して、バンドラーの依存関係ツリー検査を実行し、ファイルを1つの成果物に結合します。 –
これは2つの別の問題です。
FILE1
var myNS = {};
FILE2
myNS.MyViewModel = function(){ ... }
FILE3
myNS.OtherViewModel = function() { ... }
、。
使用するツールを選択することは、スタックオーバーフローの範囲を超えています(意見に基づいています)。しかし、はい。これを行うためにファイルを連結できます。その目的のために、ノックアウト自体[これらのフラグメントを使用](https://github.com/knockout/knockout/tree/master/build/fragments)。 –
はい!私はこれらの断片を見て、それが可能であることを知っていました。そして、すべてのファイルを一緒に連結し、それをIIFE(恐らくgulp-concatを使用して)で囲むことは非常に簡単です。しかし、問題はChromeで発展しています。私はまだchromeの開発ツールを使ってコードを変更することができます。生成されたjsファイル上でそれらを作成することはできません。元のファイルを変更できる必要があります。 – smulz