Maison  >  Article  >  interface Web  >  Une brève discussion sur les spécifications des modules dans Nodejs

Une brève discussion sur les spécifications des modules dans Nodejs

青灯夜游
青灯夜游avant
2021-06-09 10:47:182008parcourir

Cet article vous donnera une compréhension détaillée des spécifications du module dans Nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur les spécifications des modules dans Nodejs

La spécification du module est la base pour créer une application Node.js à grande échelle, elle est donc très importante ; la spécification du module Node.js est également la spécification du module CommonJS. jetez-y un bref coup d’œil ci-dessous. [Apprentissage recommandé : "Tutoriel nodejs"]

Spécification du module CommonJS

Dans le passé, le seul moyen de charger des fichiers JS était via le <script></script> tag , quel est le problème avec ça ?

  • Quand il y a plus de scripts, vous devez gérer manuellement l'ordre de chargement ; plus il y a de scripts, plus c'est difficile à gérer.
  • Les appels logiques entre différents scripts doivent être effectués via des variables globales.
  • Comment citer des fichiers JS quand il n'y a pas de html ? Cet exemple est Node.js.

Node.js possède donc la spécification du module CommonJS, et Webpack est également compatible avec la méthode d'écriture CommonJS, nous permettant d'utiliser la spécification CommonJS pour écrire du code front-end.

La spécification du module CommonJS a été initiée par la communauté JavaScript. Elle a été appliquée et promue sur Node.js, et a ensuite affecté le JavaScript côté navigateur.

require

require est l'API de la spécification du module CommonJS, qui sert à introduire les fichiers à utiliser. Par exemple, introduire lib.js :

require(&#39;./lib&#39;);

require renvoie un objet vide par défaut ; créez deux nouveaux fichiers avec le contenu suivant :

// lib.js
console.log('this is lib');

// index.js
console.log('start require')
var lib = require(&#39;./lib&#39;); // 默认返回一个空对象
console.log('end require', lib);

Exécutons-le : node index.js

Une brève discussion sur les spécifications des modules dans Nodejs

Il peut également monter certains attributs via exports : chaînes, fonctions, objets et autres types de données.

Ajoutez du code dans lib.js

console.log(&#39;this is lib&#39;)

exports.hello = "world"
exports.add = function (a, b) {
  return a + b;
}
exports.obj = { hello: "Node" }

Une brève discussion sur les spécifications des modules dans Nodejs

Il semble que selon la spécification du module CommonJS, il a un objet vide comme exports par défaut .

Donc puisque require renvoie un tel objet, que se passe-t-il si vous modifiez et ajoutez ses propriétés ?

// index.js
// 既然 require 返回一个对象,那么修改和添加属性会怎么样呢?
lib.hello = &#39;node&#39;;
lib.update = &#39;1234&#39;;
rrree

Une brève discussion sur les spécifications des modules dans Nodejs

Comme vous pouvez le voir, le contenu imprimé change après l'ajout d'un lib.js à 500ms. Ainsi, lors de la sortie via exports, vous devez faire attention à ce problème de copie. Certains étudiants ont peut-être vu ce paragraphe : Le module CommonJS génère une copie superficielle d'une valeur et le module ES6 génère une référence à la valeur. Alors que se passe-t-il ?

Il s'avère que require peut également renvoyer des données via module.exports, et le type de données n'est pas limité. Par exemple, renvoyer une fonction :

// lib.js
setTimeout(function() {
  console.log(exports)
}, 500)

Une brève discussion sur les spécifications des modules dans Nodejs

.

Vous pouvez voir : lib renvoie la sortie de la fonction minus.

signifie que lorsque est dans un module require, module.exports a une priorité plus élevée que exports Si module.exports est spécifié, alors celui spécifié par module.exports. sera utilisé. Objet Si module.exports n'est pas spécifié, l'objet exports sera utilisé.

npm

npm Je pense que tout le monde le connaît, voici donc juste une brève introduction.

npm est l'outil de gestion de packages de Node.js Lors de l'installation de Node.js, il sera livré avec npm. Les packages sont des modules Node.js écrits par d'autres. Dans notre développement quotidien, nous utilisons souvent des packages développés par d'autres et placés sur le serveur Node.js.

npm Initialisation : npm init, appuyez simplement sur Entrée lors de l'initialisation, puis un fichier package.json sera généré ; ou exécutez la commande npm init -y, qui générera un fichier package.json par défaut, les propriétés à l'intérieur sont les mêmes que si vous exécutiez npm init et appuyez sur Entrée.

Une brève discussion sur les spécifications des modules dans Nodejs

package.json Le contenu du fichier est le suivant :

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  • 下载安装依赖包 <packagename></packagename>npm install <packagename></packagename>;如果想要全局安装则添加 -gnpm install <packagename> -g</packagename>。如安装 glob 包:npm install glob
  • 卸载依赖包的命令是 npm uninstall <packagename></packagename>

比如安装 express 包,安装成功会生成一个 node-modules 文件夹,我们下载的包就放在这个文件里面:

Une brève discussion sur les spécifications des modules dans Nodejs

如果使用 npm 安装依赖包的速度很慢,可以使用淘宝镜像 cnpm 来安装,镜像是指它把国外 npm 的包做一层复制然后映射到国内的服务器上面,这样不用山长水远去国外拉包,速度会快很多。

安装 cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

cnpm 的使用和 npm 类似:cnpm install <packagename></packagename>

那如果你觉得 cnpm 不够正宗,不想长期使用,但有些包下载又确实慢了,可以临时使用镜像,比如安装 express

npm install express --registry=https://registry.npm.taobao.org

--registry= 是指定下载地址的意思,例如一些公司可能有自己的依赖包服务器,那么可以通过将这个地址指向公司的服务器地址来更快的下载依赖包。

cnpm 本身其实是 npm 的一个别名,使用 cnpm 的时候会自动帮我们加上后面的参数 --registry=https://registry.npm.taobao.org,然后通过镜像地址来下载依赖包。

另外,npm 使用遇到问题可以登录 官网 寻找解决办法:

Une brève discussion sur les spécifications des modules dans Nodejs

总结

  • Node.js 的模块规范就是 CommonJS 模块规范。
  • CommonJS 模块规范通过 require() 加载模块,默认返回一个对象,可以通过设置 exportsmodule.exports 设置模块返回的数据。
  • Node.js 的包管理工具是 npm,可通过使用镜像 cnpm 来提高下载速度。

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer