この記事では、Nodejs のモジュール仕様について詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
モジュール仕様は大規模な Node.js アプリケーションを構築するための基礎となるため、非常に重要です。Node.js モジュール仕様は CommonJS モジュール仕様でもあります。以下で簡単に見てみましょう。 [推奨学習: 「nodejs チュートリアル 」]
以前は、JS ファイルをロードする唯一の方法は<script></script>
タグが導入されていますが、これには何が問題があるのでしょうか?
html
がない場合にJSファイルを参照するにはどうすればよいですか?この例は Node.js です。 つまり、Node.js には CommonJS モジュール仕様があり、Webpack も CommonJS の記述方法と互換性があるため、CommonJS 仕様を使用してフロントエンド コードを記述することができます。
CommonJS モジュール仕様は JavaScript コミュニティによって開始され、Node.js に適用および推進され、その後ブラウザ側 JavaScript に影響を与えました。
require
は CommonJS モジュール仕様の API で、使用するファイルを導入するために使用されます。たとえば、import lib.js
:
require('./lib');
require
はデフォルトで空のオブジェクトを返します。次の内容の新しいファイルを 2 つ作成します:
// lib.js console.log('this is lib'); // index.js console.log('start require') var lib = require('./lib'); // 默认返回一个空对象 console.log('end require', lib);
実行する 見てください: nodeindex.js
exports
を通じていくつかの属性をマウントすることもできます: 文字列、関数、オブジェクト、およびその他のタイプのデータ。
lib.js
console.log('this is lib') exports.hello = "world" exports.add = function (a, b) { return a + b; } exports.obj = { hello: "Node" }
にコードを追加します。CommonJS モジュール仕様では、## by があるようです。デフォルト #exports このような空のオブジェクト。
require はそのようなオブジェクトを返すので、その属性を変更して追加するとどうなるでしょうか?
// index.js // 既然 require 返回一个对象,那么修改和添加属性会怎么样呢? lib.hello = 'node'; lib.update = '1234';
// lib.js setTimeout(function() { console.log(exports) }, 500)
500ms を
lib.js に追加すると、印刷内容が変更されたことがわかります。したがって、
exports を通じてエクスポートする場合は、このコピーの問題に注意する必要があります。一部の学生はこの段落を見たことがあるかもしれません:
CommonJS モジュールは値の浅いコピーを出力し、ES6 モジュールは値への参照を出力します。どうしたの?
require は
module.exports を通じてデータを返すこともできることがわかり、データ型は制限されていません。たとえば、関数を返す場合:
// lib.js console.log('this is lib') exports.hello = "world" exports.add = function (a, b) { return a + b; } exports.obj = { hello: "Node" } // setTimeout(function() { // console.log(exports) // }, 500) module.exports = function minus(a, b) { return a - b; }
lib は出力
minus 関数を返します。
モジュールが require の場合、
module.exports が指定されている場合、
exports よりも優先されます。 module.exports
が指定されている場合は、
module.exports で指定されているオブジェクトが使用されます。
module.exports が指定されていない場合は、
exports オブジェクト。
npm 皆さんもご存知かと思いますので、簡単に紹介します。
npm は Node.js のパッケージ管理ツールです。Node.js をインストールすると、
npm が付属します。パッケージは他人によって書かれた Node.js モジュールであり、日常の開発では他人によって開発され Node.js サーバー上に配置されたパッケージを使用することがよくあります。
npm 初期化:
npm init、初期化中に Enter キーを押すだけで、
package.json ファイルが生成されます。または、コマンドを実行します。
npm init -y、これによりデフォルトの
package.json ファイルが生成されます。内部のプロパティは、
npm init を実行して Enter キーを押した場合と同じです。
package.json ファイルの内容は次のとおりです。
{ "name": "node", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
<packageName>
:npm install <packageName>
;如果想要全局安装则添加 -g
:npm install <packageName> -g
。如安装 glob
包:npm install glob
npm uninstall <packageName>
。比如安装 express
包,安装成功会生成一个 node-modules
文件夹,我们下载的包就放在这个文件里面:
如果使用 npm
安装依赖包的速度很慢,可以使用淘宝镜像 cnpm
来安装,镜像是指它把国外 npm
的包做一层复制然后映射到国内的服务器上面,这样不用山长水远去国外拉包,速度会快很多。
安装 cnpm
:
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm
的使用和 npm
类似:cnpm install <packageName>
。
那如果你觉得 cnpm
不够正宗,不想长期使用,但有些包下载又确实慢了,可以临时使用镜像,比如安装 express
:
npm install express --registry=https://registry.npm.taobao.org
--registry=
是指定下载地址的意思,例如一些公司可能有自己的依赖包服务器,那么可以通过将这个地址指向公司的服务器地址来更快的下载依赖包。
而 cnpm
本身其实是 npm
的一个别名,使用 cnpm
的时候会自动帮我们加上后面的参数 --registry=https://registry.npm.taobao.org
,然后通过镜像地址来下载依赖包。
另外,npm 使用遇到问题可以登录 官网 寻找解决办法:
require()
加载模块,默认返回一个对象,可以通过设置 exports
或 module.exports
设置模块返回的数据。更多编程相关知识,请访问:编程视频!!
以上がNodejs のモジュール仕様に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。