2016-09-24 7 views
2

私は大量のチェックを行いました。これは間違いなく異常です。私は@typeの定義(typescript 2)をロードするAngular 2サービスを持っています。これはcommmon.jsモジュール(visionmedia/debug)をロードします。 common.jsモジュールの中には、条件がfalseでコードが実行されていなくても、エラーを引き起こす単純なif文があります。 Angularアプリはsystem.jsを使用してモジュールを読み込みます。角2 + Zone.js +共通jsモジュール:IF文の異常です。偽の場合でもコードが実行されます

通常のコードif (false) { console.log('This code is not executed') } 通常の動作では、何も

異常コードを起こりません:自体が有効であるzone.js:101 GET http://localhost:8002/ms.js 404 (Not Found)

エラー:if (false) { exports.humanize = require('ms'); }それは エラーをトリガします。実際、スクリプトは見つからない。深く間違っているのは、それが最初に現れてはならないということです。偽のif条件でブロックする必要があります。 zone.jsは、大文字小文字が偽であっても何らかの形で命令を解析するようです。これを避けるために私は何ができますか?私は、同じスクリプトがサーバ上またはフロントエンド上で呼び出されているかどうかに応じて、1つのパスまたは別のパスが必要かどうかを確認する必要があります。 CJSモジュール内

大きな画像:

// Trying to detect if environment is node.js 
// In backend (no zones) everything works as expected 
// In frontend, the require('ms') statement is executed event if condition is false. 
// I checked manually if process is defined, it's not. 
// Event the basic `false` condition also fails to block code. 
if (typeof process === 'undefined') { 
    exports.humanize = require('node_modules/ms/index.js'); 
    console.log('Browser'); 
} else { 
    exports.humanize = require('ms'); // If I comment this code works as intended 
    console.log('Node'); 
} 

答えて

1

あなたはsystemjsを使用していますか?私は、複数行コメントブロックのimport文と同様の状況を抱えていました。 SystemJSは正規表現を使用してインポート文を検出します。おそらく、エクスポート・ステートメントを検出するために同じ方法を使用します。

zonejがタスクを実行するだけなので、zone.jsでは問題ありません。タスクそのものが別の場所で起動されます。

EDIT(コメントするに答える):

私はあなたが条件付きで輸出の文を実行しなければならないと思ういけません。

は多分これは役立ちます:

var myExport; 
var myRequired; 

if (something) { 
    myExport = function() { 
    console.log('exported this'); 
    }; 
    myRequired = require('something'); 
} 
else { 
    myExport = function() { 
    console.log('exported something else'); 
    }; 
    myRequired = require('something-else'); 
} 

exports.myExport = myExport; 
exports.someMore = myRequired; 
+0

はい、私はsystem.jsを使用してください。私は角度2のヒーローのチュートリアルに従いました。それはよい考えでした。この場合は何もする必要がありますか? –

+1

私は答えに何かを追加しました –

+1

素敵に行われました!それは私には起こりませんでした。私はそれを試して答えに戻る。 –

0

問題は解決しました。 zone.jsはこの問題とは関係がありません。私はsystem.jsコミュニティから助けを受けました。これをチェックしてくださいanswer

@guybedford

This is the way that dependency analysis in SystemJS works via static parsing of CommonJS requires - it is the only way to make CommonJS support asynchronous loading. Try adding:

System.config({ 
    map: { 
     ms: '@empty' 
    } 
}); 
関連する問題