日常的学习笔记,包括 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 Docs / npm

作为前端工程师,应该对npm并不陌生。( 现在不建议使用 cnpm ,无法锁定版本,可能会出现很多奇怪的问题。目前推荐使用 nrmyarn

这里我们介绍一下 ” 3n模块

  • npm 全称 node package manager ,是nodejs的包管理器 ,用于node插件管理,包括安装、卸载、管理依赖等。
  • nrm 全称 node registry manager ,是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换。(例:nrm use taobaonrm use cnpm 等...)
  • nvm 全称 node version manager ,是一个nodejs的版本管理工具,通过它可以安装和切换不同版本的 node 和 npm。

使用npm安装的模块就是 全局模块,这种模块无法被 require 引用,只能通过命令行使用

npm root -g

我们之所以可以在 cmd控制台 直接访问npm或node,是因为在环境变量的Path属性上进行了配置。

而我们通过 npm安装的 全局模块 ,会 在npm目录下生成一个快捷方式 ,所以我们可以通过命令行使用全局模块。

配置命令行命令

假设我们现在有一个需要在命令行中输出的文件。

// ./bin/www
console.log('a')

我们该如何进行配置呢?

首先通过命令行 npm init -y 生成默认的配置文件。

package.json

在文件中添加属性 bin ,并在 bin 中添加相应的文件路径。(我们也可以自定义一个命令,进行简便操作)

package.json

我们将配置文件配置好后,需要放置到全局环境下。 这时有两种方式可以进行操作:

  • 发布到全局模块环境,并进行发布。
  • 使用 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 覆盖之前的配置文件)

这样我们就可以在命令行中输出我们配置文件中的内容了。

控制台输出

我们可以通过这种方式,实现一些自定义的全局包,就可以采用这种方式进行配置。

总结一下

  1. 先生成默认的配置文件。
  2. 配置 bin 命令。
  3. 在指定文件下添加执行方式 #! /usr/bin/env node
  4. 将此包放到npm下,可以发布到全局环境,也可以使用 npm link 进行临时调试。

本篇文章由莫小尚创作,文章中如有任何问题和纰漏,欢迎您的指正与交流。
您也可以关注我的 个人站点博客园掘金,我会在文章产出后同步上传到这些平台上。
最后感谢您的支持!

posted on 2021-11-24 08:22  莫小尚  阅读(239)  评论(0编辑  收藏  举报