2016-07-03 14 views
3

webpack/memory-fsとは特に関連していませんが、RangeError: Maximum call stack size exceededエラーが発生しています(コールスタックについては以下を参照してください)。Azureとノードjs __dirname

Azure(webapp)の__dirnameが自分の状況で\\100.78.172.13\volume-7-default\8f5ecde749dace2bb57a\4e07195f015b45ce8e9ba255dc901988\site\repository\Source\Website\Content\app\node_modules\webpack\node_modules\memory-fs\lib\normalize.jsを返し、process.cwd()D:\home\site\repository\Source\Website\Content\appを返すことがわかりました。

\\..の代わりにD:\...を返すようにノードjを設定するには何かできますか?再現する方法

Gist

  1. クローンhttps://github.com/intellismiths/webapp1リポジトリ。
  2. 新しいAzure Web Appを作成します(デフォルト設定)。
  3. GitHubを使用するように配置元を設定します。
  4. Syncをクリックします。完了までに10分以上かかり、展開が成功したことが示されます。
  5. はアズールでのアプリケーションの設定に移動し、ページとオープンPowerShellコンソールをクーズーするWEBSITE_NODE_DEFAULT_VERSION
  6. 6.2.2に移動を変更します。
  7. npm cache clean
  8. node -vを実行してノードのバージョンを確認してください。これは、コンソールでnpm run build
  9. を実行D:\home\site\respository\src\WebApp1
  10. に移動し、あなたはモジュールがを解決できないことを示し、エラーがたくさん表示されるはずのAzure上v6.2.2
  11. でなければなりません。
  12. オプション。ローカルマシンのnpm run buildをテストしてください。エラーなしでwwwroot/app.jsが生成されます。
  13. 更新webpack.config.jsには、以前のエラーを解決するためにcontext: __dirnameが含まれています。
  14. npm run build
  15. コンソールでは、「RangeError:最大呼び出しスタックサイズを超えました」というエラーが表示されます。

アップデート1

私は二package.jsonを追加した後6.2.2ランタイムを設定しようとしましたので、プロジェクト構造は、最も単純なことはできません。おそらく6.2.2にノードを設定するだけでビルドが中断されます。

+0

キーコードスニペットを入力してください。私の側であなたの問題を再現することはできません。 –

+0

@ GaryLiu-MSFTはコードと指示で私の質問を更新しました。 – Zygimantas

答えて

4

私はあなたの手順に従って、あなたの問題を再現できます。キーポイントがWEBSITE_NODE_DEFAULT_VERSION6.2.2に設定していたことがわかりました。 WEBSITE_NODE_DEFAULT_VERSION6になっていれば、webpackタスクがうまくいきました。

WEBSITE_NODE_DEFAULT_VERSION6のバージョンにダウングレードしてください。あなたのnode.jsモジュールにこのような高バージョンが必要ない場合は5.9.0です。
そしてangular2 athttps://github.com/angular/angular/blob/master/package.jsonのpackage.jsonによると、angular2リポジトリには、5.46の間のnode.jsバージョンが必要です。

さらに、Azure Web AppsのWebアプリケーションのルートディレクトリはD:\home\site\wwwrootです。したがって、Azure Web Appsでフロントエンドプロジェクトを構築する場合は、D:\home\site\wwwroot\wwwroot\mobile-web-appに移動し、npm run buildを実行する必要があります。あなたはノード5 *にダウングレードして喜んいないのであれば、研究、試行錯誤し、さまざまな実験の長い一日を過ごした後、私は許容可能な回避策を見つけた

+0

ランタイムを '5.9.0'に変更するための素晴らしい提案。ところで、 'modre-web-app'ディレクトリに' npm run build'を実行する唯一の方法は '/ wwwroot'ディレクトリ(サンプルソースコードのように)にnpm実行スクリプトを使用して'/mobile-web-app'ディレクトリに移動し、npmのインストールとスクリプトのビルドを実行します。もし '/ wwwroot'ディレクトリ内の" package.json "を使わずに同じことを達成する方法があれば、あなたは知っていますか?'Project.json'の' prepublish'スクリプトは 'cd'コマンドを直接理解しません。 – Zygimantas

+0

はい、 'D:\ home \ site \ wwwroot \ wwwroot \ mobile-web-app'の' package.json'は既に作業フォルダにあります。 'cd-mobile-web-app ' '。そして、実際には、 'project.json'の' prepublish'で設定したnpmコマンドはデプロイメントタスク中に実行され、アプリケーションをAzureにデプロイします。実行中のログは、KUDUでコマンド 'npm run build'を実行するのと同じように、展開中に見つけることができます。 –

+0

展開ログはD:\ home \ site \ deploymentsにあります。 –

0

あなたの__dirnameはデータが格納されている永続ドライブを表示し、.cwdはノードが実行された場所からの現在のディレクトリを示します。 Azureはドライブから実行されますが、ファイルは永続ドライブに保存されるためです。

あなたのGruntfileにあります。JS

module.exports = function (grunt) { 
    grunt.file.setBase(__dirname); 
    // Code omitted 
} 

を参照してください追加します。link

+0

私はこのリンクを見ましたが、私はグランを使用していません。 – Zygimantas

1

  • ダウングレードノード6.1.0
  • グローバルにのwebpackをインストールしてください。npm install -g webpack)。

ただ、6.1.0を使用すると、エラーを「最大コールスタックサイズを超えた」が、その代わりに(./node_modules/.bin/webpackを使用して)node_modulesからのWebPACKを実行しているときに私の解決の障害の多くを与え周り取得します。 webpackをインストールすると、やっと私はそれを越えました。

正しく理解すると、ノード> = 6.2の__dirnameのこの問題は、マウントされたパスの代わりにUNCフォルダパスに解決される予定です。アクティブディスカッションhereがあります。

関連する問題