前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >npm publish package 测试流程

npm publish package 测试流程

原创
作者头像
林小帅
修改于 2020-04-02 03:01:55
修改于 2020-04-02 03:01:55
1.2K00
代码可运行
举报
文章被收录于专栏:林小帅的专栏林小帅的专栏
运行总次数:0
代码可运行

上一篇 npm publish package 发布流程 中说了开发的过程,但是对于测试和调试部分并没有过多的去讲述这些事情。如果一次都说完的话文章就太长了,而且只用文字描述的话,部分内容可能无法很好的表述出来,那么读起来就略显干涩容易烦躁。所以就把这部分单独拿出来说一说。

当然还有其他的测试方式,比如说使用 Karma、NightWatch 等工具或框架来进行测试和保证功能的完全。这里就只说一下本地调试方式好了,还在开发阶段使用调试方式来修改、验证功能还是比较方便的。

OK,废话不多说直接进入正题。

01 - Link 命令

首先简单来了解一下 link 为何物

使用命令 npm help link 会弹出本地的帮助文档,我的英语水平不高就不来秀翻译了。

使用 link 的方式需要另一个项目的配合

文件夹结构如下

PROJECT

  ├─ cat-web-storage (需要发布的项目)

  └─ testModules (用于测试的项目)

npm link

首先需要创建本地 cat-web-storage 项目的 modules link

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd PROJECT\cat-web-storage
npm link

完成后会输出一行这样的路径信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NODE_PATH\node_global\node_modules\cat-web-storage -> PROJECT\cat-web-storage  

这时候就可以在文件夹 NODE_PATH\node_global\node_modules 中看到 cat-web-storage 的项目了。

但是这里和其他 node_modules 不一样的地方是 cat-web-storage 的文件夹居然有一个小箭头,也就是说生成的是一个快捷方式入口

那么就可以理解为 npm link 命令为当前项目创建了 node_global modules 的快捷方式入口。

link 命令生成的快捷方式入口
link 命令生成的快捷方式入口

npm link module

接下来在 testModules 项目中使用 cat-web-storage link

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd PROJECT\testModules
npm link cat-web-storage

完成后发现会输出这样一个路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PROJECT\testModules\node_modules\cat-web-storage -> NODE_PATH\node_global\node_modules\cat-web-storage -> PROJECT\cat-web-storage  

哇!好长啊!

node_modules 里的快捷方式入口
node_modules 里的快捷方式入口

这里我可以简单解释一下:

项目的 node_modules 里的 cat-web-storage 是来自 node_global modules 里的cat-web-storage 的快捷方式,node_global modules 里的 cat-web-storage 的快捷方式是来自 cat-web-storage

你等会儿你等会儿,我感觉有点乱。让我捋一捋……这怎么感觉像俄罗斯套娃?

link 和 指向关系
link 和 指向关系

就在这时候我沉思了一会的脑海里出现了一个大胆的想法。(赶快收起你的想法!!!)

假设我这个 testModules 也是一个 要发布的 package……(禁止套娃!!!)

02 - 启动错误

现在赶紧进行下一步,在 testModules 项目中添加如下代码

main.js 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cws from 'cat-web-storage'
Vue.use(cws)

App.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted () {
    this.$sessionStorage.set('key', 666);
}

然后启动 testModules  项目,这时候你有大概率会报错 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ERROR  Failed to compile with 1 errors
  Module build failed (from ./node_modules/eslint-loader/index.js):
  Error: No ESLint configuration found in PROJECT\cat-web-storage\dist.

(小朋友你是否有很多问号?)

看到这屏幕里带着鲜红颜色的字符你的眉头微微一皱:“为什么 install 下来的代码可以正常使用,反而本地用 link 就出问题了呢?”(嗬~哈~!砸!哇!撸!多!)

多年的经验就像条件反射一样在大脑的深处提醒着你这些鲜红色的字符来路并不是太简单,当你决定与它纠缠一番时定睛一看 Error: No ESLint configuration found ,接着嘴角露出一丝不易察觉的笑意,随即心中大喜“原来是 ESLint 的配置问题,小 case !”。心里那份与BUG战斗到底的紧张和急迫感瞬间一扫而去。

短暂的思考过后你还是觉得对待这样鲜红的字符还是要有一些仪式感,即决定还是给它一些面子。你正襟危坐而右手缓缓离开鼠标,双手置于键盘之上,气定神闲仿若置身于无比自信的光芒之中,键盘上的每一个按键都好似散发着熠熠光辉。

“噼里啪啦噼里啪啦噼里啪啦~”

(欧拉欧拉欧拉欧拉欧拉欧拉欧拉~)

(木大木大木大木大木大木大木大~)

专注而忘我,手指的每一次触击按键都像是对代码的灵魂进行锤炼。片刻之后,敲击声不再响起,眼里迸发出炽热而坚定的目光!这时的你没有半点迟疑,快速而又行云流水般的在命令行里敲下 npm run serve 随着 “啪” 的一声巨响而结束。

命令行开始变得躁动不安,字符不断的快速跳动和变更,光标亦像充满了能量一般疯狂的闪烁着。是代码被注入了灵魂吗?这跳动的字符,不断向上的百分比数值,仿佛这灵魂就要苏醒,仿佛这代码就要拥有了生命!

97%……98%……99%!!!希望的曙光就在前方,即将迎接朝阳沐浴晨光,这1%近在咫尺又好似在遥远的地方,黑暗中的无助彷徨就要变得不再迷茫!

啊!这是……?初升的太阳,那一抹红色如此的鲜亮!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ERROR  Failed to compile with 1 errors
  Module build failed (from ./node_modules/eslint-loader/index.js):
  Error: No ESLint configuration found in PROJECT\cat-web-storage\dist.

(恭喜获得成就:梅开二度)吉良吉影给你点赞! 一顿操作猛如虎,定睛一看原地杵。

这时候千万不要慌,也千万不要看到是 Error: No ESLint configuration found 就认为问题出在 ESLint 的配置上。

这里主要是涉及到了 webpack 处理模块导入的机制上。webpack 配置中加入如下代码即可解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// vue-cli 3.0+
// webpack 4.0+
chainWebpack: config => {
    config.resolve.symlinks(false);
}

如果只想解决问题,不想深入了解原因的可以跳过下面这部分。

官网文档解释:

resolve.symlinks 参数类型为 boolean,默认为 true。 是否将 link 解析到他的 link 位置,默认启用。 启用时,符号链接(symlink)的资源,将解析为其真实路径,而不是其符号链接(symlink)的位置。 注意:当使用符号链接 package 包工具时(如 npm link),可能会导致模块解析失败。

对解释还是不太理解的话,我们可以来做个实验,实验步骤如下:

先将 PROJECT\testModules 的 node_modules\cat-web-storage 更名为 cat-web-storage1。

然后再将 PROJECT\cat-web-storage 整个项目复制到 PROJECT\testModules 的 node_modules 里。

也就是说现在我们在 PROJECT\testModules\node_modules 里有两个版本的 cat-web-storage,link 版的 cat-web-storage完全版的 cat-web-storage

这时我们可以通过对 cat-web-storage 文件名修改切来换不同的版本,然后这时我们就可以在 main.js 里看到 不同版本的 import module 的路径的变化。

link 版

完全版

由此就可以得出 resolve.symlinks 是告知 webpack 应该如何处理 link 文件路径方式的配置。

简单来说就是:

启用时 以 link 的真实路径为准。

不启用时 以 link 所在文件路径为准。

当这个 link 是在 node_modules 下时:

如果 symlinks 为 true 则表示该文件是使用真实路径所以并不属于 node_modules ,所以 webpack 在编译时不会将其加入一起构建。

如果 symlinks 为 false 时是以当前 link 所在文件夹路径为准,cat-web-storage link 是在 node_modules 下,所以 webpack 在编译时会将其加入一起构建。

03 - 测试与调试

还记得  npm publish package 发布流程 04 - package.js 改造 一节中的说明提到的。

如果要将包变得与众多开源 npm module 一样的话,那么就需要对 package.js 进行改造了。

package.js 中需要更改/添加以下配置信息

• main 变更以 dist/ 为入口的 index.js 文件

• module 以 dist/ 为入口的功能模块文件

但是如果想要使用 debugger 调试代码的话,这部分就需要更改为指向源码 src 而非编译后的 dist

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module: dist/index.js -> module: src/index.js
main: dist/index.js -> main: src/index.js

这时候再次启动 testModules 项目,就可以对 cat-web-storage 进行愉快的调试和修改处理了,不再需要每次都 npm build cat-web-storage 了。

如果你要问 module 和 main 有什么区别的话,我只能说在我实际的调试过程中发现webpack 对 module 的调用优先于对 main 的调用,如果 module 找不到则会使用 main,否则输出错误。

最后

  • 有些问题是确实是和错误提示没有太大关系。
  • 官方文档是个好东西,但文档内容不会穷举所有例子和场景,有时感觉会帮不上忙。
  • 踩坑了不可怕,就怕没有正视它。穷追不舍的探索过程会让你印象深刻也更了解它。

版权声明:

本文版权属于作者 林小帅,未经授权不得转载及二次修改。

转载或合作请在后台留言及联系方式。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
npm publish package 开发错误集合
这是【npm publish package】的最后一篇文章,总结了开发时需要注意的要点还有目前我自己遇到的错误集合。
林小帅
2020/04/08
1.3K0
npm publish package 开发错误集合
npm publish package 发布流程
之前在和小伙伴做一些项目学习的时候经常会写一些重复的代码,然后复制粘贴到下一个项目中使用,比如之前写了 localStorage、sessionStorage等 API 的函数封装实现。假设项目需要使用这些封装好的 API 就要自己再复制粘贴一份,假设如果发现其中有可改进或者修改的地方,那么就需要自己再将这些修改后的文件覆盖到每一个使用过的项目中。
林小帅
2020/03/18
3.2K0
npm publish package 发布流程
使用vue-cli搭建spa项目
目录 1. vue-cli安装 1.1 安装前提 1.2 什么是vue-cli 1.3 安装vue-cli 2. 使用vue-cli构建项目 2.1 使用脚手架创建项目骨架 2.2 到新建项目目录,安装需要的模块 2.3 如何修改端口号 2.4 添加element-ui模块 2.5 package.json详解 3. install命令中的-g, -S, -D参数 4. vue项目结构说明 5.什么是*.vue文件 6. 启动过程 7. 开发示例 7.1 做一个自定义组件Welcome 7.2 增加“用户管
用户10196776
2022/11/22
7800
使用vue-cli搭建spa项目
package.json 配置完全解读
package.json 是前端每个项目都有的 json 文件,位于项目的根目录。许多脚手架在搭建项目时也会自动帮我们自动初始化好 package.json。
Leecason
2022/12/16
3K0
package.json 配置完全解读
Vue安装及环境配置、开发工具
大家好,又见面了,我是你们的朋友全栈君。 本文主要介绍了Vue的安装及环境配置,新建vue项目,简单介绍vue开发工具和项目结构。
全栈程序员站长
2022/06/30
1.4K0
Vue安装及环境配置、开发工具
npm 与 package.json 快速入门
张拭心 shixinzhang
2018/01/05
2.1K0
npm 与 package.json 快速入门
Webpack(一):安装和基础配置
之前急着搭建博客,所以 Nodejs 安装好后就没管了,今天 webpack -v 命令死活用不了(提示“webpack 不是内部命令”),才发现是因为当时忘记配置环境变量了。
Chor
2019/11/07
2.7K0
如何在gitlab上发布npm包
大家好,我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder。
前端柒八九
2024/02/29
7240
如何在gitlab上发布npm包
webpack5学习笔记
assetModuleFilename: 'images/contenthash.png'
代码哈士奇
2022/01/26
2.7K0
从 package.json 来聊聊如何管理一款优秀的 Npm 包
其实原本只是想写一些有关于 Package.json 相关的内容,但是最近在关于业务频繁迭代的 Npm 包版本管理方面做了一些尝试,积累了一部分心得,所以刚好也拿出来在文章的后半部分和大伙分享下。
19组清风
2022/09/19
1.3K0
从 package.json 来聊聊如何管理一款优秀的 Npm 包
vue06安装vue-cli+使用vue-cli搭建项目+什么是*.vue文件+开发示例+必问面试知识点
安装成功后会在配置的node_global\node_modules目录下会看到vue-cli目录。
天蝎座的程序媛
2022/11/18
7930
vue06安装vue-cli+使用vue-cli搭建项目+什么是*.vue文件+开发示例+必问面试知识点
搞清楚怎样基于 Webpack5 从 0 搭建 React开发环境-超详细
出处 @刘江 ,原文地址 https://juejin.cn/post/6929496472232656909
zz_jesse
2021/04/21
2.6K0
搞清楚怎样基于 Webpack5 从 0 搭建 React开发环境-超详细
npm 设置全局变量安装路径及环境配置
安装 nodejs 的时候最好不要安装到默认的C盘下。但是一般情况下安装node.js环境,程序会自动把 npm 全局模块的路径设置在系统盘(一般默认是C盘)。 文章目录 查看 npm 默认路径配
兮动人
2021/06/11
19K1
npm 设置全局变量安装路径及环境配置
npm脚本和package.json
  在创建node.js项目如一个vue项目,或一个react项目时,项目都会生成一个描述文件package.json 。
tandaxia
2019/12/31
1.9K0
webpack、npm 相关错误汇总
使用webstorm搭建vue项目,报如上错误。 本地node版本为10。 原因: 版本10 fs.promises的API是实验性的,webstorm不允许使用。 解决:卸载掉原有node.js,重新安装node.js 8版本。
城市中的游牧民族
2019/02/21
2.7K0
webpack、npm 相关错误汇总
webpack 入门教程
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
老马
2018/08/20
4.1K0
webpack 入门教程
一个合格的中级前端工程师需要掌握的技能笔记(下)
Github来源:一个合格的中级前端工程师需要掌握的技能 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者
达达前端
2021/10/09
1.7K0
一个合格的中级前端工程师需要掌握的技能笔记(下)
万字梳理 Webpack 常用配置和优化方案
在项目根目录下新建 webpack.config.js,作为 webpack 的默认配置文件。
Chor
2021/09/08
3K0
webpack处理less的loader_登录器和引擎版本号不匹配
在第三步的时候我并没有在package.json中找到webpack配置项,就跳过继续第四步,结果没解决
全栈程序员站长
2022/09/22
8020
发布自己的npm包
注册npm账户 ---- 注册地址 用户名,密码,邮箱后面发布会用到 注册完需要验证邮箱 会发送邮件至你注册的邮箱 按指示完成验证即可 新建项目 ---- 创建目录 mkdir package 切换目录 cd package 初始化npm npm init -y 后续可在 package.json 文件中增加更改配置 安装ESlint ---- 安装 npm i eslint 初始化配置 eslint --init 配置 Commitlint ---- 安装 Commitlint 脚手架和
peng_tianyu
2022/12/15
5680
相关推荐
npm publish package 开发错误集合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验