模拟网站效果,深圳大腕互联网站建设,mit网站可以做app,做内销网站#x1f601; 作者简介#xff1a;一名大四的学生#xff0c;致力学习前端开发技术 ⭐️个人主页#xff1a;夜宵饽饽的主页 ❔ 系列专栏#xff1a;NodeJs #x1f450;学习格言#xff1a;成功不是终点#xff0c;失败也并非末日#xff0c;最重要的是继续前进的勇气… 作者简介一名大四的学生致力学习前端开发技术 ⭐️个人主页夜宵饽饽的主页 ❔ 系列专栏NodeJs 学习格言成功不是终点失败也并非末日最重要的是继续前进的勇气 前言 本文是关于Node命令中的npm link命令的详细使用还有脚手架的背后原理如果我们需要开发命令行工具或者脚手架时npm link的使用是必不可少的一环有关环境变量部分大家一定要好好理解希望可以帮助到大家欢迎大家的补充和纠正 文章目录 Node命令1.CLI全局命令1.1 环境变量1.2 npm安装全局指令流程3.package.json里的bin字段 2.npm link2.1作为npm包被其他包引用在开发调试的包中执行npm link在项目中执行npm link 2.2 作为命令行工具需要直接在终端调用 最后 Node命令
1.CLI全局命令
当我们安装一个npm包之后我们可以再电脑的任意终端使用这个npm包提供的指令例如当我们安装了nest npm install -g nestjs/cli 我们就可以在任意地方使用nest这个指令例如
nest new my-nest-project 就会帮我们创建一个名字叫 my-nest-project的nest项目这是怎么做到的呢
1.1 环境变量
我们做格知识准备先了解一下什么是环境变量。
环境变量就是Window一个命令执行路径
echo %PATH%C:\Program Files\Java\jdk1.8.0_261\bin;C:\Program Files\Git\bin;C:\Windows\System32;...上面打印出来的就是环境变量其中有我们熟悉的java文件执行Git指令等当我们在终端执行某一个指令时其会在这些路径下面寻找是否有对应的可执行文件。有就会执行没有就报错错误信息不是内部或外部命令也不是可运行的程序或批处理文件
1.2 npm安装全局指令流程
我们在执行npm install -g nestjs/cli之后就可以启动nest全局命令这是因为在环境变量的路径下创建创建了一个nest文件
//可以使用下面这个命令查询Node全局安装指令的位置。
//注意输出的位置这个位置很重要下文会经常用到
npm bin -g
// C:\Users\AppData\Roaming\npm在这个输出的路劲下可以看到nest文件 这个文件会中有指向具体执行的npm包的位置/node_modules/nestjs/cli/bin/nest.js
所以总的执行流程可以感觉到
输入一个nest指令 - 在环境变量中寻找 -找到nest可执行文件 -执行/node_modules/nestjs/cli/bin/nest.js 文件
3.package.json里的bin字段
我们来看nestjs包中的package.json可以发现一个重点 我们可以注意到与上面指令真正执行的文件是一致的所以最终执行的是bin/nest.js
2.npm link
上面说的是全局安装包的模式那如果是还在本地开发的包呢我们不能每改一点东西就发到线上然后安装下来再验证吧这时候就需要使用npm link了
我们使用npm link主要分为两种功能
一个是这个npm包需要被其他的包引用一个是这个npm包作为命令行工具直接再终端用指令执行
2.1作为npm包被其他包引用
场景假设我们有两个包分别是a和bb是我们本地在开发的调试包a是我们的项目a需要引用到b
这个场景我们分为两步来实现
在b中使用npm link在a中使用这个b包
在开发调试的包中执行npm link
我们在b的目录下执行npm link这个时候会发现在C:\Users\AppData\Roaming\npm\node_modules目录下会生成一个链接文件名字就是package.json中的name 在项目中执行npm link
当我们在b中执行npm link之后已经在全局npm包中生成了一个目录所以我们可以在开发项目的a包中安装b只要在a包中执行npm link b 这时候我们就在a项目中使用require(b)的时候会通过项目下的node_module找到b而这个b文件可以注意到后面的一个箭头表示这个b文件会引用到实际的b中有点像网页中的链接一样的感觉
我们现在可以来理一下流程 总结当我们在a中执行npm link b命令的时候系统会去 C:\Users\AppData\Roaming\npm\node_modules 这个目录下寻找有没有b文件(或者链接文件那么刚好我们在b目录下执行的npm link时会在上面的路径中生成b的链接文件所以这个命令执行的关系时a/node_module/b - C:\Users\AppData\Roaming\npm\node_modules/b - 真正的b文件
2.2 作为命令行工具需要直接在终端调用
这种功能的实现一般来说都是命令行工具脚手架之类的可以直接在终端输入指令来执行项目主文件就像nest.js一样在终端输入nest就会执行nest脚手架项目中的主文件来生成项目框架
我们在a文件中输入node link 会在C:\Users\AppData\Roaming\npm\node_modules 路径下生成a文件的链接而且还会在外一层的目录生成指令文件 例如 上面中可以看到执行npm link命令之后在package.json中的bin对象下的a-cmd: ./index.js 键值被使用之后我们可以在命令行使用a-cmd命令,而这个命令会去执行index.js文件。
我们接下来看 C:\Users\AppData\Roaming\npm中是什么样子 从上图可以看到终端中有了像nest指令一样的a-cmd指令当在终端输入该执行后会执行index.js文件 成功输出语句
最后
建议 本文的要结合实操性去理解希望大家自己手动操作一遍哪些npm link知识点相信你会收获更多的 笔者会继续更新前端的知识目前已有两个大专栏如果感兴趣不妨关注一下吧谢谢
JavaScript小贴士有关javaScritp中的小的知识点有点像知识碎片JavaScript进阶指南 里面是javaScritp中的一个大知识点例如原型this指向,模块各种类型知识扩展等。