0

SystemJs と Angular2 は初めてです。サードパーティのパッケージを使用していますが、bundles/code.jsファイルがあるものとないものがあります。

私が使用しているものは、bundles/code.jsなんとか機能するようになりました。

ファイルを含めて、ファイル内に入れる<script src=foo/bundles/code.js>ことができます。import * from 'code/foo'ts

bundles/code.jsには次のようなものがSystem.registerDynamic("code/foo",...)あるので、これはすべて意味があります(これは私の理解です)importcode/foo

バンドルを使用しないパッケージを見つけました。ロードする必要があるファイルは次の.jsようになります。

// ./vendor/ng2-file-upload/ng2-file-upload.js

function __export(m) {
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./components/file-upload/file-select'));
__export(require('./components/file-upload/file-drop'));
__export(require('./components/file-upload/file-uploader'));
var file_select_2 = require('./components/file-upload/file-select');
var file_drop_2 = require('./components/file-upload/file-drop');
exports.FILE_UPLOAD_DIRECTIVES = [file_select_2.FileSelect, file_drop_2.FileDrop];
//# sourceMappingURL=ng2-file-upload.js.map

Systemこれはフォーマットではないことに気づきました。私は自分で次のことを試しましたindex.html

System.config({
    packages: {
        'js': {
            format: 'register',
            defaultExtension: 'js'
        }
    },
    meta: {
       'vendor/ng2-file-upload/ng2-file-upload.js' : {
            format: 'cjs', // I have also tried 'amd' and 'global'
            defaultExtension: 'js'
       }
    }
});

私も試してみました

System.config({
    packages: {
        'js': {
            format: 'register',
            defaultExtension: 'js'
        },
       'vendor/ng2-file-upload/ng2-file-upload.js' : {
            format: 'cjs', // I have also tried 'amd' and 'global'
            defaultExtension: 'js'
       }
    }
});

何をしても、次のエラーが発生します。

Uncaught ReferenceError: require が定義されていません

2 つの質問があります。

  • どのようにロードしng2-file-upload.jsますか?
  • bundleこのパッケージの を作成するにはどうすればよいですか? (パッケージには、実行時にすべて.ts.d.tsファイルが含まれますnpm install)
4

1 に答える 1

1

bundles/code.js には System.registerDynamic("code/foo",...) のようなものがあり、インポートは code/foo が何であるかを知っているので、これはすべて私にとって理にかなっています(これは私の理解です)

コードをシステム モジュールとしてコンパイルする場合、スクリプト タグを使用してそれらをロードしても安全SystemJSです。これは次の方法でテストできます。

  <script async src="~/system.src.js"></script>

system.js を非同期的にロードすると、次のようになります。

Uncaught ReferenceError: システムが定義されていません

モジュールも同様です。ローダーをcommonjs使用しない場合はRequireJS、スクリプト タグを介してロードしないでください。代わりに、モジュールSystemJSをロードするために使用する必要があります。commonjs

  System.import("vendor/ng2-file-upload/ng2-file-upload.js")
    .then(function() {
       System.import("/static/scripts/bootstrap.js");
    }, console.error.bind(console));

ng2-file-upload.jsすでにバンドルになっているはずなので、この方法でロードしています。.tsそうでない場合は、そのファイルをソース ファイルに追加し、コードを使用するのと同じ方法でそれらを使用します。

于 2016-02-28T01:48:38.400 に答える