ホームページ > 記事 > ウェブフロントエンド > ノードでインポート構文を使用する方法の簡単な分析
node.js は import 構文をサポートしています。これは単純な知識ポイントですが、知識の誤解をなくし、知識の外の世界にもっと注意を払い、自分自身の知識の境界を常に開くことを思い出させてくれます。
CommonJS と
ESM の 2 つですが、Node.js
ESM 標準では、プロジェクト内で 2 つの標準コードが共存することがよくあり、その結果、次のような状況が発生します:
// 在node端执行构建的时候 const _ = require('loadsh') // 在浏览器端实现的时候 import _ from 'loadsh';このように、開発ではペイン ポイントが発生しやすくなります。解決策は、
webpack
vite などのさまざまな構築ツールを使用して問題を解決することです。特に、プロジェクトで node.js コンパイル スクリプトを作成する場合、多くの場合、切り替えます。 [関連チュートリアルの推奨事項:
nodejs ビデオ チュートリアル 、プログラミング教育 ]
import
export などの構文が使われていますが、ついにこの日を待ったのでしょうか?
–experimental-modules# を通じてこの機能を有効にする必要が常にありました。 ## ではないため、安定性はほとんどのプロジェクトでオンになっていませんが、16 以降はプロジェクトで大胆に使用できるようになりましたが、一部の古いプロジェクトでは当面はオンにしないことを推奨しています。
CommonJSファイルのサフィックスを # に変更します。 ##.mjsモジュール仕様と
ECMAScript
モジュール仕様 開発者は、.mjs
ファイル拡張子package.json
を通じてtype=module
またはnode xxx.js --input-type# を設定できます。 # フラグは、コードを実行するために
ECMAScript仕様を使用するように Node.js に指示します。これらの設定がない場合、Node.js は実行に
CommonJSを使用します。
Node.js モジュール: ECMAScript モジュール上記を通じて、いくつかの使用方法を知ることができます:
ESM 仕様
ESM 仕様
に従って実行されます。
実行パラメータ
--input-type
1. 従来の方法: import _ from 'lodash';
import { readFile } from 'fs';
import Demo from './Demo.mjs'; // 绝对路径或相对路径都可以
export readFile;
export default readFile;
2. パラメータ付きで使用:
// 由于参数不同, 这个会让`foo.mjs`被加载两次,而不会利用缓存中的`foo.mjs` import './foo.mjs?query=1'; // loads ./foo.mjs with query of "?query=1" import './foo.mjs?query=2'; // loads ./foo.mjs with query of "?query=2"3.
data:
形式の URL フォーム##をサポート#import 'data:text/javascript,console.log("hello!");'; // text/javascript 会将后面的内容当成js模块 import { test } from 'data:text/javascript,function test(){console.log("test")};export {test};'; // 这里我们是不是扩宽思路,直接加载在线js呢? import _ from 'data:application/json,"world!"' assert { type: 'json' }; // application/json 则是json // application/wasm for Wasm
4、アサーション アサーション (実験的な機能)
json javascript
など <pre class="brush:js;toolbar:false;">import fooData from &#39;./foo.json&#39; assert { type: &#39;json&#39; };</pre>
5 などの特定の形式でファイルを強制的にロードします。commonjs 仕様をロードします。 module
もちろん、commonjs 標準モジュールの読み込みにも対応していますので、使い方は以下の通りです: <pre class="brush:js;toolbar:false;">import { default as cjs } from &#39;cjs&#39;; // module.exports 导出
import cjsSugar from &#39;cjs&#39;; // module.exports
import * as m from &#39;cjs&#39;;</pre>
6. import() 非同期インポート
このような使い方はごく普通です。リアルタイムでロードする必要はありません。必要なときにロードされます。
const { default: barData } = await import('./bar.json', { assert: { type: 'json' } });
7. http/https からの導入をサポートします (実験機能)
これは現在実験的な機能です。次のような制限があります:
http2/3 プロトコルはサポートされませんhttp プロトコルは、127.0 などのローカル IP アドレスにのみ使用できます。 .0.1Cookie、認可、その他の情報は運ばれて送信されませんimport worker_threads from 'node:worker_threads'; import { configure, resize } from 'https://example.com/imagelib.mjs'; configure({ worker_threads });
import または export で、require
またはmodule.exports を使用することは許可されていない場合、エラーが報告されます:
const a = require('a') ^ ReferenceError: require is not defined in ES module scope, you can use import instead at file:///Users/borfyqiu/Desktop/study/github/qiubohong.github.io/code/demo-rollup/test.mjs:4:12 at ModuleJob.run (node:internal/modules/esm/module_job:193:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:530:24) at async loadESM (node:internal/process/esm_loader:91:5) at async handleMainPromise (node:internal/modules/run_main:65:12)
概要
実際、これは一般的な知識ではありません。Node.js を少しだけやったことがあれば、注意を払い続ければ、基本的にこれについて学ぶことができます。特徴。
しかし、注意を払わない人は、自分自身の知識の誤解に陥りがちです。Node.js は ESM 仕様をサポートしていないと常に考え、Node.js がなぜサポートされていないのかについて不平を言うことさえあります。それをサポートしませんか? nodejs チュートリアル
を参照してください。以上がノードでインポート構文を使用する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。