收藏
回答

npm模块路径问题

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 需求 客户端 7.0.4 2.6.6

- 需求的场景描述(希望解决的问题)

从2.2.1之后是支持npm模块的,但是目前的npm模块对于文件处理有些问题,主要是跟原生的npm模块的使用比起来。

  1. 模块不支持默认的index.js,在引用模块的时候需要输入完整的xx-module/wx/index,而不是像npm模块那样,只需要xx-module/wx即可。

  2. 模块在“构建npm”之后调整了目录,其实是根据入口文件编译生成了一个文件。


针对2,目前的npm模块通过指定入口文件,比如index.js,应该是使用了类似rollup.js的优化编译,也就是会根据入口文件搜索关联文件,然后编译处理。如果文件中有另一个文件other.js没有使用,则会被丢弃。


其实,这样处理是很合理的。只是恰好有这样的需求,需要处理两个平台,有一定兼容性问题。在模块内部使用了两个入口,类似这样:


import wx from '@modules/xx-module/wx';

import co from '@modules/xx-module/co';


同一个npm模块,提供两个入口。如果不能提供多个入口的话,需要再拆分为两个模块,其实虽然有一些兼容性问题,很多逻辑处理都是一直的,再拆分为两个模块的话,不利于代码的组织和管理。


- 希望提供的能力

  1. 模块默认index.js文件处理;

  2. 可以在模块文件中指定多个入口文件(可在读取入口文件的配置文件中添加额外的字段进行配置),npm模块编译的时候保留多个入口文件。

回答关注问题邀请回答
收藏

1 个回答

  • cunjinli
    cunjinli
    2019-05-05
    1. 目前是支持的

    2. 多入口可以通过下面的方式搞

    https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html#%E5%8F%91%E5%B8%83%E5%B0%8F%E7%A8%8B%E5%BA%8F-npm-%E5%8C%85%E7%9A%84%E7%BA%A6%E6%9D%9F

    2019-05-05
    赞同
    回复 2
    • 冬寒季
      冬寒季
      2019-05-06

      从头再看了一遍,的确支持的,只是文档说明有些不明显。我在这里也说明一下,避免别人也遇到类似的疑问。

      官方文档地址我就不贴了,主要在原理介绍那里,有这么一行小字:“构建打包分为两种:小程序 npm 包会直接拷贝构建文件生成目录下的所有文件到 miniprogram_npm 中;其他 npm 包则会从入口 js 文件开始走一遍依赖分析和打包过程(类似 webpack)”,也就是第2条。然后,贴了大概的实例代码。

      构建包有两种方式:

      第一种,直接拷贝文件目录;

      第二种,通过统一入口编译依赖生成一个文件;


      对于第一种,是可以保留文件目录结构的,只是需要将保留的文件目录结构放到miniprogram_dist文件中,也就是该目录下的文件都会原封不动到拷贝到miniprogram_npm中。


      好吧,暂时算是满足了我的多文件入口的需求。只是写起来的确让人有点恶心,不得不重新组织下相关模块的实现,还要添加几个冗余的过渡文件。


      其实,从小程序这边考虑,能这样,已经很不错了吧!


      2019-05-06
      回复
    • 冬寒季
      冬寒季
      2019-05-06回复冬寒季

      写完之后,发现忘记道一声“谢谢”了。在此谢过!

      2019-05-06
      回复
登录 后发表内容