[解決済み】SystemJSとWebpackの違いは何ですか?
質問
初めてのAngularアプリケーションを作成していますが、モジュールローダーの役割とは何でしょうか? なぜそれが必要なのでしょうか? Googleで検索してみましたが、なぜアプリケーションを実行するためにモジュールローダーをインストールする必要があるのか理解できません。
を使うだけではダメなのでしょうか?
import
を使用して、ノードモジュールから何かをロードすることはできますか?
私は以下のようにしました。
このチュートリアル
(SystemJSを使用したもの)を使用するようになり、その結果
systemjs.config.js
ファイルを作成します。
/**
* System configuration for Angular samples
* Adjust as necessary for your application needs.
*/
(function(global) {
// map tells the System loader where to look for things
var map = {
'app': 'transpiled', // 'dist',
'@angular': 'node_modules/@angular',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'rxjs': 'node_modules/rxjs'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
};
var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];
// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}
// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}
// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
var config = {
map: map,
packages: packages
};
System.config(config);
})(this);
なぜこの設定ファイルが必要なのか?
なぜSystemJS(またはWebPackやその他)が必要なのか?
最後に、あなたの意見として、何がより良いのでしょうか?
解決方法は?
SystemJSのGithubページにアクセスすると、ツールの説明が表示されます。
<ブロッククオートユニバーサルダイナミックモジュールローダー - ブラウザとNodeJSでES6モジュール、AMD、CommonJSとグローバルスクリプトをロードします。
TypeScriptやES6ではモジュールを使用するため、モジュールローダーが必要です。SystemJSの場合は
systemjs.config.js
で、モジュール名と対応するファイルとの照合方法を設定することができます。
この設定ファイル(とSystemJS)は、アプリケーションのメインモジュールをインポートするために明示的に使用する場合に必要です。
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
TypeScriptを使用し、コンパイラの設定を
commonjs
モジュールを使用すると、コンパイラは、もはや SystemJS に基づいていないコードを作成します。この例では、typescript コンパイラの設定ファイルは、次のようになります。
{
"compilerOptions": {
"target": "es5",
"module": "commonjs", // <------
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
Webpackは柔軟なモジュールバンドルラーです。つまり、モジュールを扱うだけでなく、アプリケーションをパッケージ化する方法(ファイルの連結、ファイルのUGL化、...)も提供します。また、開発のためのロードリロードを備えた開発サーバも提供します。
SystemJSとWebpackは別物ですが、SystemJSの場合、まだやることがあります(with ガルパ または SystemJSビルダー など)を使って、Angular2アプリケーションを本番用にパッケージングします。
関連
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み】PromiseとObservablesの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】Vueが定義されていない