网站怎么自己做推广,网站建设公司-跨界鱼科技,哪里有网站建设联系方式,网页设计综合实训论文Node.js#xff1a;模块  包 模块module对象 包npm安装包配置文件镜像源 分类 模块 
模块化是指解决一个复杂问题时#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说#xff0c;模块是可组合、分解和更换的单元。 
简单来说#xff0c;就是把一个… Node.js模块  包 模块module对象 包npm安装包配置文件镜像源 分类   模块 
模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说模块是可组合、分解和更换的单元。 
简单来说就是把一个大问题拆分成一系列小问题然后逐个解决的过程。这就像是搭乐高积木不是直接建造一个巨大的城堡而是先建造城堡花园等几个小部分然后再把它们组合起来。 
如果后续某些功能不需要了或者某些功能需要更新只需要操作对应的模块即可不需要改动整个程序。 
再比如说可能两个程序需要一个相同的功能那么就就可以把这个模块复制两份给不同的程序使用。 
所以模块可以提高代码的复用性可维护性。 
Node.js 中根据模块来源的不同将模块分为了3 大类 
内置模块内置模块是由 Node.js 官方提供的例如 fs、path、http 等自定义模块用户创建的每个 js 文件都是自定义模块第三方模块由第三方开发出来的模块使用前需要先下载 
想要加载一个模块可以使用require方法 
const obj  require(模块名)
const obj  require(模块路径)对于内置模块和第三方模块只需要传入模块名即可如果是自定义模块就需要填入模块的路径。 
比如 
const test  requits(./test.js)自定义模块一定是一个.js结尾的文件所以也可以省略.js后缀 
const test  requits(./test)模块被导入时模块内部的代码会立刻执行一次。 
./test.js写入以下代码 
console.log(require test.js success)在另一个文件中导入模块 
const test  require(./test.js)
console.log(test)输出结果 
require test.js success
{}在./test.js中的代码就立刻执行了一次test变量拿到了一个空对象。 module对象 
在模块中定义的变量、方法都只能在模块内部被访问这种模块级别的访问限制称为模块作用域。 
那么外部导入模块后又要如何访问模块的内容这就需要通过module对象了。 
在每一个.js模块中都有一个module对象这里面存储了当前模块的相关信息。 
直接console.log输出这个对象 
{id: .,path: D:\\code_web\\test\\Node\\02,exports: {},filename: D:\\code_web\\test\\Node\\02\\main.js,loaded: false,children: [],paths: [D:\\code_web\\test\\Node\\02\\node_modules,D:\\code_web\\test\\Node\\node_modules,D:\\code_web\\test\\node_modules,D:\\code_web\\node_modules,D:\\node_modules],[Symbol(kIsMainSymbol)]: true,[Symbol(kIsCachedByESMLoader)]: false,[Symbol(kIsExecuting)]: true
}可以看到一些文件的相关信息其中exports: {}是一个空对象通过exports这个属性可以向外共享模块的内容默认情况为空。当外界通过require导入模块时拿到的就是这个对象。 
示例 
在test.js中将成员与方法添加到module.exports中 
console.log(require test.js success)module.exports.username  张三
module.exports.sayHello  function(){console.log(this.username   say hello)
}在main.js中导入模块并调用函数 
const test  require(./test.js)
console.log(test)test.sayHello()输出结果 
require test.js success
{ username: 张三, sayHello: [Function (anonymous)] }
张三 say hello此时test变量拿到的就是一个有内容的对象并且可以正常调用模块内的属性与方法。 
每次共享一个新的成员或方法都要使用module.exports这有点麻烦了。为此Node.js提供了exports对象它与module.exports指向同一个对象在编写代码时可以使用简写。 
exports.username  张三
exports.sayHello  function(){console.log(this.username   say hello)
}但是要注意不要改变exports指向的对象。 
exports  {username: 李四,sayHello: function(){console.log(this.username   say hello)}
}如果在某个模块内部这样写等到模块导入后拿到的是一个空对象而不是exports指向的对象。因为以上代码相当于把exports指向了一个新的对象此时module.exports和exports指向不同导入模块最终以module.exports为准所以exports就失效了。 包 
在Node.js中第三方模块又称为包。 
Node.js的内置模块功能较少基于内置模块开发效率很低因此很多第三方封装了更加高级方便的模块并公开给大家使用。 
npm 
如果包太多那么每个不同的包都要去不同的地方下载这样很麻烦。但是npm建立了一个包共享平台很多程序员都会把自己封装的包提交到这个平台因此我们就可以通过npm来快速下载所需的包。 
官方网址 
https://www.npmjs.com/安装包 
下载包的命令 
npm install 包名
npm i 包名i是install的简写两种格式都可以下载包。 
删除包的命令 
npm uninstell 包名下载一个moment包 这个包是一个时间相关的包使用时直接以普通模块的形式导入即可 
const moment  require(moment)const dt  moment().format(YYYY-MM-DD HH:mm:ss)
console.log(dt)此处moment().format(YYYY-MM-DD HH:mm:ss)用于格式化输出当前时间。 
输出结果 
2024-10-30 20:40:36配置文件 
在第一次装包后同级目录会出现以下文件 node_modules存储了所有下载的包比如刚下载的moment而.package-lock,json是包的相关信息内容如下 
{name: 02,lockfileVersion: 3,requires: true,packages: {: {dependencies: {moment: ^2.30.1}},node_modules/moment: {version: 2.30.1,resolved: https://registry.npmjs.org/moment/-/moment-2.30.1.tgz,integrity: sha512-uEmtNhbDOrWPFShdjFCBfy9f2YoyzRpwclDqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how,license: MIT,engines: {node: *}}}
}这里面保存了下载的包的相关信息比如下载版本下载来源等等。 
如果想要下载指定版本的包语法如下 
npm install 包名版本号
npm i 包名版本号例如安装moment:2.22.2版本 显示修改了一个包也就是之前的2.30.1版本被覆盖了。 
除去node_modules和.package-lock,json还可以找到一个package,json文件 这个文件与node_modules同级内部包含dependencies属性 
{dependencies: {moment: ^2.30.1}
}比如再下载一个jQuery 此时package,json文件更新 
{dependencies: {jquery: ^3.7.1,moment: ^2.30.1}
}这里记录了所有下载过的包当拿到一个项目时往往不会提供node_modules目录因为这个目录很大不利于传输。因此会提供一个package,json文件这个文件可以帮助快速下载所有依赖的包。 
npm install
npm i当npm install不带任何包名就会去下载package,json文件中指定的所有包快速初始化项目。 
package,json文件不在node_modules目录内部而是与node_modules同级就是因为多人协作时node_modules往往不会发送给同事而是发送package,json来初始化项目。 镜像源 
默认情况下npm会去https://registry.npmjs.org/这个网址下载包但是这是一个国外的网址下载速度比较慢。 
为此淘宝在国内建立了一个镜像站https://registry.taobao.org/这个网站会实时同步https://registry.npmjs.org/所以国内用户可以修改镜像源为这个淘宝的镜像源提升下载效率。 
查看当前镜像源 
npm config get registry安装nrm工具 
npm i nrm -g查看可用的镜像源 
nrm ls切换到淘宝镜像源 
nrm use taobao分类 
包分为项目包与全局包 
项目包只供一个项目使用的安装到node_modules目录下的包全局包主机上所有项目都可以使用的包 
如果想要安装或卸载全局包只需要加上-g参数即可 
npm i -g 包名
npm uninstall -g 包名先前安装的nrm就是按照全局安装的这样后续所有项目下载包时都会使用淘宝的镜像源。