Node获取pnpm安装的包源码及代码路径操作

 更新时间:2022年08月04日 14:37:44   作者:CRPER  
这篇文章主要为大家介绍了Node如何获取pnpm安装的包源码真实代码路径并操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

在改造老工程的包依赖管理的时候,有时候我们想引入一些社区比较好用的包管理;有时候一些阻塞点会阻拦我们,特别我们构建流程可能会拷贝node_modules包源码的行为;

举个研发例子

不同公司的CLI因为面对的业务场景和构建场景不一样,有些时候,我们会做一些差异化的特性,比如工程前端CLI有暴露代码映射拷贝行为,就是打包的时候会把node_modules下的某些包的资源拷贝到特定路径,用于后续其他处理

// 本地调试 editor 时需要打开以下配置
  copy: {
    // editor source reference
    'dist/libs/ckeditor': 'node_modules/xxxx-editor/dist',
  },

npm安装的目录结构是固定的,包名+源文件 ,所以寻址是固定的

问题聚焦

当我们想用pnpm这类的时候,安装的node_modules目录结构就是有他们自己的一些特性,而不是一个常规npm生成的node_modules结构

pnpm 默认创建了一个非平铺的 node_modules,因此代码无法访问任意包

如图所示:

这种包名加版本号的,就没法作为一个固定规律寻址了。因为存在可变性!那么我们实在要搞,有木有法子?

姿势

node里面有一个api [require.resolve]很实用,刚好解决了我们这个场景;它可以返回require包的绝对路径【基于package.json的入口字段】

demo

在我的一个本地工程内,采用pnpm安装依赖,输出的绝对路径可以寻址到源码

console.log(require.resolve('yaml'));
console.log(require.resolve('axios'));
// /Users/code/engineering-tools/node_modules/.pnpm/yaml@2.1.1/node_modules/yaml/dist/index.js
// /Users/code/engineering-tools/node_modules/.pnpm/axios@0.21.4/node_modules/axios/index.js

那么怎么适配我们之前的配置文件呢?

// 本地调试 editor 时需要打开以下配置
  copy: {
    // editor source reference
    'dist/libs/ckeditor': require.resolve('xxxx-editor'),
  },

这时候CLI运行态的时候就可以动态检测到这个模块的绝对路径,拿到了绝对路径。接下来想拷贝什么就很方便做到了~

以上就是Node获取pnpm安装的包源码及代码路径操作的详细内容,更多关于Node pnpm安装包路径的资料请关注脚本之家其它相关文章!

相关文章

  • 教你在heroku云平台上部署Node.js应用

    教你在heroku云平台上部署Node.js应用

    heroku是构建在AWS之上的一个PaaS云平台,现在支持Ruby, Node.js, Python, Java, 和 PHP,代码的部署是通过git进行,编译和运行都是自动的。
    2014-07-07
  • 全面了解Node事件循环

    全面了解Node事件循环

    这篇文章主要详细介绍了Node事件循环,文中的图片以及文字讲解可以帮助大家更好的了解事件循环,感兴趣的小伙伴可以看一看,多多参考一下
    2021-08-08
  • 20行代码简单实现koa洋葱圈模型示例详解

    20行代码简单实现koa洋葱圈模型示例详解

    这篇文章主要为大家介绍了20行代码简单实现koa洋葱圈模型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 用node.js写一个jenkins发版脚本

    用node.js写一个jenkins发版脚本

    这篇文章主要介绍了用node.js写一个jenkins发版脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • npm更新命令更新最新版本的实现方式

    npm更新命令更新最新版本的实现方式

    这篇文章主要介绍了npm更新命令更新最新版本的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 详解Nodejs中自动化浏览器操作神器Puppeteer的使用

    详解Nodejs中自动化浏览器操作神器Puppeteer的使用

    Puppeteer是一个JavaScript库,它提供了一种方式来通过DevTools协议控制无头浏览器,本文主要为大家介绍了Puppeteer的主要特性和使用方法,感兴趣的可以了解下
    2024-01-01
  • Node.js实用代码段之获取Buffer对象字节长度

    Node.js实用代码段之获取Buffer对象字节长度

    这篇文章主要介绍了Node.js实用代码段之获取Buffer对象字节长度,需要的朋友可以参考下
    2016-03-03
  • Node.js自定义实现文件路由功能

    Node.js自定义实现文件路由功能

    这篇文章主要介绍了Node.js自定义实现文件路由功能的相关资料,需要的朋友可以参考下
    2017-09-09
  • Node.js卸载与重装及zip与msi安装详解

    Node.js卸载与重装及zip与msi安装详解

    Node.js是一个JavaScript运行环境,可以使JavaScript这类脚本语言编写出来的代码运行速度获得极大提升,下面这篇文章主要给大家介绍了关于Node.js卸载与重装及zip与msi安装的相关资料,需要的朋友可以参考下
    2023-01-01
  • 详解npm 配置项registry修改为淘宝镜像

    详解npm 配置项registry修改为淘宝镜像

    这篇文章主要介绍了详解npm 配置项registry修改为淘宝镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论