标签:Node npm node modules 笔记 模块 bin 我们
日常的学习笔记,包括 ES6、Promise、Node.js、Webpack、http 原理、Vue全家桶,后续可能还会继续更新 Typescript、Vue3 和 常见的面试题 等等。
第三方模块
第三方模块的引用也是 没有绝对路径 的。
let r = require('co');
console.log(r);
第三方模块的 引用形式主要分为两种:
-
全局模块,直接安装到电脑的npm目录下。
-
内置的第三方模块,默认会沿着 当前目录向上查找
node_modules
下的同名文件夹,先根据package.json
中的main
设定的文件查找。如不存在,再到index.js
中查找。如果自己的目录下未找到node_modules
,则会向上查找。(可以通过打印module.paths
进行路径查找)假设我们在当前目录下,新建一个
node_modules
,在里面自定义一个文件夹名为co
,文件夹内包含一个index.js
文件。文件里面写上内容module.exports = "hello"
。这时我们再重新打印,发现上面的结果变成了
hello
。原因就是因为 第三方模块的查找规则。
npm
作为前端工程师,应该对npm
并不陌生。( 现在不建议使用 cnpm
,无法锁定版本,可能会出现很多奇怪的问题。目前推荐使用 nrm
或 yarn
)
这里我们介绍一下 ” 3n模块 “
npm
全称node package manager
,是nodejs的包管理器 ,用于node插件管理,包括安装、卸载、管理依赖等。nrm
全称node registry manager
,是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换。(例:nrm use taobao
、nrm use cnpm
等...)nvm
全称node version manager
,是一个nodejs的版本管理工具,通过它可以安装和切换不同版本的 node 和 npm。
使用npm安装的模块就是 全局模块,这种模块无法被 require
引用,只能通过命令行使用。
我们之所以可以在 cmd控制台 直接访问npm或node,是因为在环境变量的Path属性上进行了配置。
而我们通过 npm安装的 全局模块 ,会 在npm目录下生成一个快捷方式 ,所以我们可以通过命令行使用全局模块。
配置命令行命令
假设我们现在有一个需要在命令行中输出的文件。
// ./bin/www
console.log('a')
我们该如何进行配置呢?
首先通过命令行 npm init -y
生成默认的配置文件。
在文件中添加属性 bin
,并在 bin
中添加相应的文件路径。(我们也可以自定义一个命令,进行简便操作)
我们将配置文件配置好后,需要放置到全局环境下。 这时有两种方式可以进行操作:
- 发布到全局模块环境,并进行发布。
- 使用
npm link
,将我们当前文件link到 node_module 文件夹下。(当前推荐使用这种,方便调试)
这时我们可以看到,当前自定义命令 "gm"
已经映射到了我们当前的文件目录。
// 控制台打印
C:\Users\XXX\AppData\Roaming\npm\gm -> C:\Users\XXX\AppData\Roaming\npm\node_modules\global-modules\bin\www
C:\Users\XXX\AppData\Roaming\npm\node_modules\global-modules -> D:\xxxx\xxxx\xxxx\xxx\xxx\global-modules
但是我们现在还无法直接使用 "gm"
命令,我们还需要配置一个运行方式。
在我们之前创建好的文件最开头,输入 #! /usr/bin/env node
#! /usr/bin/env node
console.log('a')
这行代码的意思就是告诉我们的命令行,当前文件是用当前环境变量里面node运行的。
修改了运行方式,我们需要重新运行 npm link --force
。(--force
覆盖之前的配置文件)
这样我们就可以在命令行中输出我们配置文件中的内容了。
我们可以通过这种方式,实现一些自定义的全局包,就可以采用这种方式进行配置。
总结一下:
- 先生成默认的配置文件。
- 配置
bin
命令。 - 在指定文件下添加执行方式
#! /usr/bin/env node
。 - 将此包放到npm下,可以发布到全局环境,也可以使用
npm link
进行临时调试。
本篇文章由莫小尚创作,文章中如有任何问题和纰漏,欢迎您的指正与交流。
您也可以关注我的 个人站点、博客园 和 掘金,我会在文章产出后同步上传到这些平台上。
最后感谢您的支持!
标签:Node,npm,node,modules,笔记,模块,bin,我们 来源: https://www.cnblogs.com/moxiaoshang/p/15596530.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。