legacy-knowledge-base
公開されました Jul. 2, 2025

liferay-npm-bundler でサードパーティの JS パッケージをインポートすると、"Cannot use import statement outside a module" となります。

written-by

Alfonso Crisci

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • Liferay Bundlerで作成したLiferay NPMモジュール(例えば、 npm Angular Portlet Templateなど)にサードパーティ製パッケージの依存関係を追加してインポートすると、サーバー/ブラウザのコンソールで以下のようなエラーが発生することがあります。
    Uncaught SyntaxError: Cannot use import statement outside a module
    Uncaught SyntaxError: Unexpected token 'export'

環境への配慮

  • ライフレイDXP 7.0

決議

  • この問題は、バンドルラー v.2 の既知の制限事項であり、同じトピックはここで議論されました。 https://github。com/liferay/liferay-js-toolkit/issues/261

    詳細を見ると、バンドルラーは常にサードパーティのモジュールがCommonJS/ES5形式であることを期待しています。しかし、特定のライブラリでは、 import/export ステートメントにES5の構文が混ざっていて、バンドルラーが理解できないため、最終的なJARに直接入れられてしまい、ミニファイヤーがフラグを立ててしまい、ブラウザでの解決に失敗してしまいます。 そういえば、2つの回避策があります。

    1) バンドルラーの代わりにプロジェクトをwebpackでバンドルし、手動でポートレットに統合する

    2) バンドルラーが起動する頃には、モジュールがインポート/エクスポート形式からCommonJSに移されているようにビルドを微調整する。 これは、バンドルの前に babel を呼び出すか、バンドルの babel-loader プラグインを使ってモジュールを transpile することで実現できます。

    上記のアプローチが確実に動作することを保証することはできません。 エンジニアは今後のバージョン3のバンドルでWebpack的な機能を実装できるように頑張ります。
did-this-article-resolve-your-issue

legacy-knowledge-base