私は今、私のプロジェクトでWebpackを使っていますが、今朝私が開発したデベロッパーズを更新するまでは素晴らしかったです。それはまだ素晴らしいことだが、私は謎のエラーを持っている:私のコードのいずれもコールスタックでないときWebpack definepluginをログに使用する
{ SyntaxError: Unexpected token (1:5)
at Parser.pp$4.raise (\node_modules\acorn\dist\acorn.js:2431:15)
at Parser.pp.unexpected (\node_modules\acorn\dist\acorn.js:616:10)
at Parser.pp$3.parseExprAtom (\node_modules\acorn\dist\acorn.js:1963:12)
at Parser.parseExprAtom (\node_modules\acorn-dynamic-import\lib\inject.js:55:31)
at Parser.pp$3.parseExprSubscripts (\node_modules\acorn\dist\acorn.js:1831:21)
at Parser.pp$3.parseMaybeUnary (\node_modules\acorn\dist\acorn.js:1808:19)
at Parser.pp$3.parseExprOps (\node_modules\acorn\dist\acorn.js:1750:21)
at Parser.pp$3.parseMaybeConditional (\node_modules\acorn\dist\acorn.js:1733:21)
at Parser.pp$3.parseMaybeAssign (\node_modules\acorn\dist\acorn.js:1710:21)
at Parser.pp$3.parseParenAndDistinguishExpression (\node_modules\acorn\dist\acorn.js:2008:32) pos: 5, loc: Position { line: 1, column: 5 }, raisedAt: 5 }
私はそれを愛します! :)
移動する前にこれについてのカップルポイント。
- エラーは、プロダクションビルドと単体テストでのみ発生します。 devビルドでは発生しません
- エラーは何も失敗しません。ビルドは完了です。すべてのテストが実行され、正常に実行されます。プロダクションビルドに明らかな悪影響はありません。
問題の原因を突き止めるために数分の時間がかかりました。 Webpack Definepluginか、むしろ、私がどのように使っているのかが分かります。私は条件付きで条件付きラッピングせずに自分のコードにデバッグログを注入してきた:
new webpack.DefinePlugin({
DEBUG_LOG: DEBUG ? 'console.log' : '// ',
DEBUG_WARN: DEBUG ? 'console.warn' : '// ',
DEBUG_ERR: DEBUG ? 'console.error' : '// '
}),
使い方は非常に簡単です:
DEBUG_LOG('something useful');
DEBUG_WARN('something unusual');
DEBUG_ERR('fire bad! fire bad!');
それがDEVで実行すると、私は便利なデバッグメッセージやprodの中にそれらのメッセージを取得しますコメントに変換され、マイナーに取り除かれます。
WebpackがAcornJSを使用しているように見えますが、私がここでやったことに満足できず、なぜそれほど難しいのか分かりません。プラグインを実行する前に、未定義の関数を評価するだけです。デベロッパーではconsole.log
と評価され、Acornはであると考えられます。です。 prod/testでは、コメントに評価されます。これは、単一行のコメントである限り、問題ありません。一方ではすべてが機能しているように見えますが、間違いが気になるので、なぜこれを野生に再リリースする前に不平を言っているのか理解したいと思います。何かご意見は?あなたのデバッグバージョンのWebPACKで
あなたの分析は私の出力で見たものと一致しません(折り返し括弧はありません)...ディスクに書き込まれる前に中間ステップがありますか?脆弱性に関しては、確かに... definepluginは、このようなソリューションがより一般的な伝統的なコンパイラの '#define'に触発されていますが、プラグインはこれをより堅牢にするためにマクロのようなサポートが必要です。私はStrip Loaderで試してみて、それがうまくいくならこの答えを受け入れます。 –