首页
学习
活动
专区
工具
TVP
发布

Node.js-如何在不每五分钟发布一次的情况下测试你的新NPM模块

因为以前我都只是从npm源安装依赖包,我从没有引入过一个本地的依赖包,即便我已经写了并且还发布了几个npm包了(这不就是我么哈哈)!直到后来我在开发两个本地互相依赖的项目的时候遇到了一些问题。

如何开发本地npm项目

在我说任何内容之前,我必须要说:使用和来开发多个包实在是比我之前用过的语言有趣太多了。和使用的打包格式很简单而且直观。之前有一些bug,但是格式是很好的 -- 希望可以把bug解决,让它更完美。

首先我们要讨论的是如何引入其它的本地包,使用绝对路径,然后我们会讨论更有用并且经过改善的(认真阅读本文,你会看到一些很有意思的事情)。

是终极武器,而且是开发本地依赖包的最佳方式。但是如果你需要测试这些钩子的话,并不会执行这些钩子,所以你需要:

现在

现在,假设你正在开发一个模块,我们叫它“Viking”,但是让我们做得更好一点,因为可能不会接受大写字符,所以我们叫他viking。你肯定最终想要发布viking,而且你需要在开发过程中测试它。你可能想在发布之前完整测试它。

我们可以并且也应该在viking模块项目内部写一些测试脚本,但是在现在这个时候,新建一个项目可能会更好(使用),然后安装在本机上正在开发的viking模块。我们给这个专门为了测试我们的viking项目的项目起一个名字--Tudor。tudor依赖viking项目。

Tudor项目的package.json文件大概长这样

问题

对于初学者来说,主要的问题是,应该要把viking模块发布,然后在tudor项目中使用;更麻烦的是每次对viking模块有修改的时候,你需要先发布到NPM,然后在Tudor项目中重新安装或者更新viking,这样的开发体验可以说是很不愉快了。

但是,有一个很简单的方法来解决这个问题。

有一些很聪明的`Node.js`开发大佬知道我们可以通过命名一个文件并且引入包含那个文件的目录。那么,逻辑上来说,你可以引入那个文件(或者随便你怎么叫吧),通过简单地引入(确保字段指向的是文件的位置,无论它在什么地方,对于大多数项目来说,它可能的位置是)所在的目录位置。

这就是世界中打包和引入的本质了。

因此,在我们的项目中,老的测试模块的方法大概会是这样:

但当我们在本地开发或的时候,有一个高端一些的方法可以用:

正如你看到的那样,我们可以轻松地引入本地项目并且在我们准备好发布之前完全不使用到NPM。我使用绝对路径是因为这样更方便,并且也没有原因让我不去用绝对路径吧。

我,并且很多人,被NPM惯坏了,都知道NPM是一个使用起来多么简单的工具。但是现在,如果你不是已经会了的话,那么你已经学会了如何使用本地模块了。但是,使用文件路径而不是模块名并不是长久之计。如我们将在下一节看到的,作为开发目的,使用软连接(symlinks)引入本地项目才是最好的方法。软连接是一种主流操作系统中的特性,例如、、等等。

第一个解决方案

我们可以这样做:

这会在文件中做如下操作:

这个软连接把viking引入到tudor项目中,和类似,但是他们还是有一些很重要的区别,我们一会会看到。

第二个解决方案:使用npm link

现在,在开发本地模块时使用绝对路径只是朝着更好的方案迈出了一小步。这其实并不是最好的解决方案。为什么呢?很明显,现在在你的代码中包含了只可能在你本地才能正常运行的代码。你肯定不会想在每个开发和发布周期都要来回修改引入路径。因此,我们需要将代码回退到最开始(不使用绝对路径,只是用包名)并且使用,就像这样:

可以去[官网](https://docs.npmjs.com/cli/link)查看更多关于的介绍。的运行方式相当有意思,因为它会更新目录下所有相关的目录。要记得的是你不可以将一个包当做它自己的依赖,但是你却可以使用软连接去将其加到自己的依赖中。使用后者会使得测试模块变得非常容易,因为你可以避免使用相对路径。

比较两种方案

上述两种方案至少有三个重要的区别:

1. 最大的区别是会执行钩子,但是不会。

2.使用NPM的全局命名空间,而则不会。前者会在全局命名空间中创建一个指向viking的软连接,然后在tudor中使用时,会创建一个指向全局的软连接而不是直接指向viking的软连接。这在使用全局版本管理工具(例如:NVM)时会有很重要的区别。

3.会改变文件的内容,而不会。

还有一种方法测试本地模块

我们现在有两种方法了:

1.

2.

那么第三种是什么呢?

第三种方案是我们可以使用把本地项目打包,然后使用下述方案安装:

这个链接: https://medium.com/@the1mills/testing-npm-alpha-beta-rc-packages-108b65eb03d2)(自备梯子)中可以了解更多这个方案的内容

NPM-Link-Up

我(原作者)写了一些很有用的NPM link工具,叫NPM-Link-Up(https://github.com/ORESoftware/npm-link-up),对于复杂项目中需要引入多个本地开发包很有用。

如果你有超过两个本地开发的模块/包需要集成,请一定要试一下这个工具。也可以尝试使用Lerna或者Rush,他们都是为了解决类似问题的工具。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190220G05R0500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券