浅谈Nodejs中的模块规范

本篇文章给大家详细了解一下nodejs中的模块规范。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

浅谈Nodejs中的模块规范

模块规范是构建一个大型 Node.js 应用的基础,所以非常重要;Node.js 模块规范也就是 CommonJS 模块规范,下面来简单了解一下吧。【推荐学习:《nodejs》】

CommonJS 模块规范

以前加载 JS 文件的唯一方式是通过 标签引入,这个会有什么问题呢?

脚本变多时,需要手动管理加载的顺序;脚本越多就越难管理。不同脚本之间的逻辑调用,需要通过全局变量的方式。没有 html 的时候怎么引用 JS 文件呢?这个例子就是 Node.js。

于是 Node.js 就有了 CommonJS 模块规范,而 Webpack 也是兼容了 CommonJS 的写法,让我们可以用 CommonJS 规范来写前端代码。

CommonJS 模块规范是 JavaScript 社区发起的,它在 Node.js 上得到应用并推广,后续也影响到了浏览器端 JavaScript。

require

require 是 CommonJS 模块规范的 API,用来引入要使用的文件。比如引入 lib.js:

require('./lib');

登录后复制

require 默认返回一个空对象;新建两个文件,文件内容如下:

// lib.jsconsole.log('this is lib');// index.jsconsole.log('start require')var lib = require('./lib'); // 默认返回一个空对象console.log('end require', lib);

登录后复制

来运行看看:node index.js

1.png

它也是可以通过 exports 来挂载一些属性的:字符串、函数、对象等类型的数据。

在 lib.js 添加一些代码

console.log('this is lib')exports.hello = "world"exports.add = function (a, b) {  return a + b;}exports.obj = { hello: "Node" }

登录后复制

2.png

看来在 CommonJS 模块规范下,它是默认有一个 exports 这样的空对象的。

那既然 require 返回这样一个对象,那么修改和添加其中的属性会怎么样呢?

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

登录后复制

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

登录后复制

3.png

可以看到,在 lib.js 加了一个 500ms 之后打印的内容是改变了的。所以通过 exports 输出的时候要注意这个拷贝的问题。可能有些同学会看到过这样的一段话:CommonJS 模块输出的是一个值的浅拷贝,ES6 模块输出的是值的引用。那么这是怎么回事呢?

原来 require 还可以通过 module.exports 的方式返回数据,而且数据类型是不限的,例如返回一个函数:

// lib.jsconsole.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;}

登录后复制

4.png

可以看到:lib 返回输出的 minus 函数。

在 require 一个模块时,module.exports 的优先级要高于 exports,如果指定了 module.exports,那么就会使用 module.exports 指定的对象,如果没有指定 module.exports,就会使用 exports 对象。

npm

npm 相信大家都不陌生,那这里就只是简单介绍一下吧。

npm 是 Node.js 的包管理工具,安装 Node.js 的时候都会自带有 npm 的。而包则是别人写的 Node.js 模块,我们平时开发都会经常用到一些别人开发出来放到 Node.js 服务器上面的包。

npm 初始化:npm init,初始化的时候一直回车就好,之后会生成一个 package.json 文件;或者执行命令 npm init -y,这样就是生成一个默认的 package.json 文件,里面的属性和执行 npm init 一直回车是一样的。

5.png

package.json 文件内容如下:

{  "name": "node",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo "Error: no test specified" && exit 1"  },  "author": "",  "license": "ISC"}

登录后复制下载安装依赖包 :npm install ;如果想要全局安装则添加 -g:npm install -g。如安装 glob 包:npm install glob卸载依赖包的命令是 npm uninstall 。

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

6.png

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

安装 cnpm:

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

登录后复制

cnpm 的使用和 npm 类似:cnpm install 。

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

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

登录后复制

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

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

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

7.png

总结

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

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

以上就是浅谈Nodejs中的模块规范的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2634271.html

(0)
上一篇 2025年3月7日 04:31:05
下一篇 2025年2月20日 07:09:30

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈使用Node.js搭建一个简单的 HTTP 服务器

    本篇文章给大家使用node.js搭建一个简单的 http 服务器来试着操纵计算机资源。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 什么是 HTTP 服务? HTTP 协议是什么? 超文本传输协议,一个应用层协议,一个在…

    2025年3月7日 编程技术
    200
  • 深入了解Node.js中的Koa框架

    本篇文章给大家详细介绍一下node.js中的koa框架。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 在前文已经简单的了解了 Express 框架,并且使用该框架对石头剪刀布游戏进行了改造,那么来看看 Koa 框架和 E…

    2025年3月7日
    200
  • 浅谈Nodejs中的可读流,可读流如何实现?

    本篇文章给大家介绍一下nodejs中的流(stream),看看node可读流的实现方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 stream的概念 流(stream)是 Node.js 中处理流式数据的抽象接口。 …

    2025年3月7日 编程技术
    200
  • 深入了解Node.js的中Worker Threads(工作线程)

    【推荐学习:《nodejs 教程》】 理解 Node 的底层对于理解 Workers 是很有必要的。 当一个 Node.js 的应用启动的同时,它会启动如下模块: 一个进程一个线程事件循环机制JS 引擎实例Node.js 实例 一个进程:p…

    2025年3月7日
    200
  • 深入浅析Node.js中的内置模块

    本篇文章带大家了解一下node.js中的内置模块,看看node.js内置模块运行机制,通过示例简单介绍一下eventemitter (观察者模式)。 Node.js 架构图 内置模块 一些栗子 File System 操作文件的 APIPr…

    2025年3月7日
    200
  • 深入了解Node.js中的非阻塞 I/O

    说到 Node.js,大家大概率听过一堆让人头晕的专有名词 关于异步,主要是事件循环和**非阻塞 I/O,**正式因为这两点 Node.js 才能称作高性能。 因此搞清楚 Node.js 的异步机制和使用方法是很重要的 Node.js 的非…

    2025年3月7日
    200
  • 一文快速了解Node.js中的事件循环

    本篇文章带大家了解一下node.js异步编程中的事件循环。事件循环是实现node非阻塞i/o非常重要的一部分!事件循环,非阻塞i/o都是属于libuv这个c++库的底层能力。理解了事件循环,非阻塞i/o就理解了node的异步是怎样运行的! …

    2025年3月7日
    200
  • 浅谈nodejs执行bash脚本的几种方案

    nodejs如何执行bash脚本?本篇文章给大家介绍一下node执行bash脚本的几种方案。 前言 最近在学习bash脚本语法,但是如果对bash语法不是熟手的话,感觉非常容易出错,比如说:显示未定义的变量shell中变量没有定义,仍然是可…

    2025年3月7日
    200
  • 一文快速了解Nodejs中crypto模块的用法

    crypto是node.js中实现加密和解密的模块,下面本篇文章带大家了解一下crypto模块,介绍一下利用crypto模块进行散列(哈希)算法、hmac算法、对称加密、非对称加密的方法。 1. crypto crypto是node.js中…

    2025年3月7日 编程技术
    200
  • 使用Node.js怎么压缩图片?方法介绍

    使用node.js怎么压缩图片?下面本篇文章给大家介绍一下使用node.js实现图片压缩的方法,一起来看看吧! 一、内容简介 前段时间开发了上传图片到七牛的Vscode插件,当时还差了一个功能:图片压缩,这次也终于解决了;同时还解决了一个遗…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论