ノードのモジュール管理


私は定期的に特定のファイルの機能が他のファイルでインポートされた作業でノードプロジェクトを使用してrequire キーワード、および他のファイルで使用するようにエクスポートmodule.exports キーワード.最近、私は、プロジェクトを使用してサイドプロジェクトで作業を開始import キーワードとエクスポートexport キーワード.両方のプロジェクトは同じプログラミング言語を使用していますが、私はこれまで今までこの違いを疑いませんでした.

モジュールとは
コードをより乾燥させるには、多くの場所で使用されるコードを、必要なすべてのファイルにインポートされる別の関数に抽出するように言われます.たとえば、アプリケーションを広く使用する日付解析機能.JavaScript Speakでは、この関数はモジュールと呼ばれます.しかしながら、モジュールは必ずしも関数ではなく、関連する関数の数、クラス、あるいは単一の変数であってもよい.

ノードの解決
ノードのモジュール管理システムをCommonJSと呼び、前述のrequire キーワード.たとえば、フェッチリクエストでトークン妥当性をチェックする非常に単純な関数があります.最後の行では、このモジュールを他の場所で使用するようにエクスポートできます:
// utils/isTokenValid.js
const isTokenValid = (err) => {
    if (err.status === 401) return false;
    return true;
};

module.exports = isTokenValid;
これは別のファイルで使用する方法です.
// index.js
const isTokenValid = require('../utils/isTokenValid');

const response = await fetch('/');
if (!isTokenValid(response)) 
    throw new Error('Authentication error');

それから、ES 6
言語のこの改正で、ネイティブのモジュール管理システムが導入されました.さて、上記の例を書き換えることができます.
// utils/isTokenValid.js
const isTokenValid = (err) => {
    if (err.status === 401) return false;
    return true;
};

export default isTokenValid;
// index.js
import isTokenValid from '../utils/isTokenValid';

const response = await fetch('/');
if (!isTokenValid(response)) 
    throw new Error('Authentication error');
この例では、デフォルトのエクスポートを使用しますisTokenValid . あるいは、export { isTokenValid } その後インポートindex.js ASimport { isTokenValid } from '../utils/isTokenValid' .

使用import/export インノード
これで、我々は完全なスタックのJavaScriptアプリケーションを構築している場合は、これらの2つの構文のそれぞれを使用する場所を覚えておく必要がありますか?ありがたいことに、ノードは既にそれにあり、ES 6インポート/エクスポートの構文へのサポートを提供し始めました.現時点では、サポートはexperimental and unstable したがって、生産で使用することをお勧めしません.それを使用することは簡単ではありません.js.mjs あなたの変化に加えてpackage.json .
他の方法は、インポート/エクスポートを使用してノードのアプリを起動するには、ES 5にすべてのES 6コードを転送の世話をすることができますバベルをインストールすることです.個人的に、私は私のフロントエンドで私のバックエンドとES 6構文でCommonJS構文を使用し続けることを選びました.
読書ありがとう.今度まで👋
カバー写真Danny Lines 不平を言う