ノードとwebpackを使用して、グラフィックデザイン会社のHTMLテンプレートをAngular 2プロジェクトに組み込んでいます。
HTMLは、次のようなさまざまなスクリプトを取り込みます。
<script src="js/jquery.icheck.min.js"></script>
<script src="js/waypoints.min.js"></script>
だから私はcomponent.tsでそれらを必要としています:
var icheckJs = require('../js/jquery.icheck.min');
var waypointsJs = require('../js/waypoints.min');
他にもいくつかのスクリプトと、正しく機能しているように見えるいくつかのSASSがあります。
webpackは喜んですべてを構築し、「npm start」も成功します。ただし、ブラウザに到達すると、この苦情が表示されます。
Uncaught ReferenceError: require is not defined node_modules/angular2/platform/browser.js:1 Uncaught ReferenceError: require is not defined
これは実際に次の行によってurl.jsからスローされます。
var punycode = require('punycode');
これはCommonJsに必要ですか?数週間前にこれをWeb開発で使用したことがなかったので、Commonbacksなど、webbackのさまざまな要求を解決しています。
.jsローダー用のwebpack.config.jsからの抜粋は次のようになります。
{ test: /\.js$/, loader: 'script' }
このエラーを回避するにはどうすればよいですか?
WebPackはこれを単独で行うことができます。スクリプトsrcタグを使用して、最初に最初のチャンクをロードすることを確認する必要があります。通常、エントリの値になります:-bundleが追加されたWebPack構成のキー。明示的なチャンクを行っていない場合、エントリチャンクは初期チャンクとエントリチャンクの両方であり、WebPackランタイムが含まれている必要があります。 WebPackランタイムには、コードを実行する前にrequire関数が含まれ、ロードされます。
コンポーネントまたは必要なものはすべて、スクリプトがそこから開始されるため、エントリファイルから要求される必要があります。基本的に、明示的にチャンク化していない場合、エントリポイントJSファイルは、スクリプトsrcに含めることができる唯一のファイルです。それ以外はすべて必要です。含めるものは通常、JSファイル名にバンドルされます。デフォルトでは、main-bundle.jsである必要があります。
あなたが持っていると仮定して1行でこれを行うことができます
dist/bundle.js
のバンドルブラウザのページをclient/client.js
でレンダリングするソースファイルクライアントコード
webpack && webpack ./client/client.js dist/bundle.js \ && webpack-dev-server --progress --color
ライブラリの一部のソースが変更された場合、dist/bundle.js
パッケージで最後の変更が取得されるため、webpack
を再度実行する必要があります(もちろん、grunt
ファイル監視タスクのように追加できます)。 webpack-dev-server
はサーバーを実行します。