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安装包路径的资料请关注脚本之家其它相关文章!

相关文章

  • Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容

    Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容

    这篇文章主要给大家介绍了关于Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面跟着小编来一起看看吧。
    2017-06-06
  • 什么时候不能在 Node.js 中使用 Lock Files

    什么时候不能在 Node.js 中使用 Lock Files

    这篇文章主要介绍了什么时候不能在 Node.js 中使用 Lock Files,但是当你在开发要发布到 npm 的包时,应避免使用这类 lock file 。下面我们来一起了解一下吧
    2019-06-06
  • node.js包管理工具Yarn使用简介

    node.js包管理工具Yarn使用简介

    这篇文章介绍了JS包管理工具Yarn的基本用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • nodejs中的fiber(纤程)库详解

    nodejs中的fiber(纤程)库详解

    这篇文章主要介绍了nodejs中的fiber(纤程)库详解,本文讲解了node-fibers的安装、API介绍、方法使用示例等内容,需要的朋友可以参考下
    2015-03-03
  • nodejs的压缩文件模块archiver用法示例

    nodejs的压缩文件模块archiver用法示例

    这篇文章主要介绍了nodejs的压缩文件模块archiver用法,结合实例形式分析了nodejs使用archiver模块实现文件压缩操作的步骤与相关注意事项,需要的朋友可以参考下
    2017-01-01
  • 一文详解如何在IDEA中配置Node.js

    一文详解如何在IDEA中配置Node.js

    idea中支持运行很多种编程语言,只需要在电脑中安装好对应的语言环境,下面这篇文章主要给大家介绍了关于如何在IDEA中配置Node.js的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Node.js在child_process域和错误冒泡及捕获实践

    Node.js在child_process域和错误冒泡及捕获实践

    这篇文章主要为大家介绍了Node.js在child_process域和错误冒泡及捕获实践示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 简单谈谈关于 npm 5.0 的新坑

    简单谈谈关于 npm 5.0 的新坑

    最近使用到了npm5.0,第一次使用确实被惊艳了,但随着而来的是一些坑,下面这篇文章主要给大家简单介绍了关于npm 5的一些新坑,需要的朋友可以参考学习,下面来一起看看吧。
    2017-06-06
  • nest.js,egg.js,midway,express,koa的区别小结

    nest.js,egg.js,midway,express,koa的区别小结

    本文主要介绍了nest.js,egg.js,midway,express,koa的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Windows 系统下安装和部署Egret的开发环境

    Windows 系统下安装和部署Egret的开发环境

    Egret基于TypeScript开发的,而TypeScript编译工具tsc是基于Node.js 开发的。所以在安装过程中,我们先需要对于基础支持工具进行安装。
    2014-07-07

最新评论