格局打开——微信小程序使用npm

3,689 阅读4分钟

笔者在开发小程序项目过程中遇到了需要使用第三方npm包的场景,比如说使用mqtt、protobuf等。在笔者之前的文章微信小程序使用mqtt之详细的避坑指南中提到既可以通过npm的方式也可以通过mqtt的压缩文件的方式使用mqtt。但经过笔者测试发现npm的方式使用mqtt有很多问题,所以对于mqtt就使用了压缩文件。

事实上,不可能每个npm包在使用的时候都有问题,所以本文就以使用node.js的buffer为例说明如何在微信小程序中使用npm包。

设置miniprogramRoot

通过阅读文档(参考资料【1】、【2】)我们需要注意三点:

1.miniprogramRoot用于指定指定小程序源码的目录

2.npm 的 package.json 需要在 project.config.json 定义的 miniprogramRoot 之内

3.miniprogramRoot 字段不存在时,miniprogramRoot 就是 project.config.json 所在的目录

这三点汇成一句话就是:设置一下miniprogramRoot ,依赖应该被安装到miniprogram目录下。

同时注意到笔者的小程序目录结构如下图所示:

小程序的代码是在miniprogram目录下,project.config.json(项目配置文件)位于根目录下,如果此时运行npm install xxx 那么依赖会被安装,根目录下会多出一个node_modules文件夹,根目录下的package.json的dependencies中也会记录该依赖。但这样显然不对,因为上文提到的需要注意的三点,我们可以知道依赖应该被安装到miniprogram目录下,所以我们需要设置miniprogramRoot字段。

{
  "miniprogramRoot": "miniprogram/"
}

安装依赖

由于miniprogram目录下默认是没有package.json文件的,所以需要先运行命令 npm init -y 为其生成package.json文件,之后就可以正常安装依赖了,如下图所示:

安装完后,可以看到miniprogram目录下的package.json文件的dependencies字段中,记录了buffer

依赖的构建

依赖安装成功后,可以点击开发者工具中的菜单栏:工具 --> 构建 npm,对依赖进行构建。感兴趣的读者可以阅读文档(文末参考资料【3】)来了解小程序对npm包构建的原理。

构建完成后,就可以看到miniprogram目录下多了一个miniprogram_npm文件夹,里面会存放构建打包后的 npm 包。然后我们就可以在代码中使用安装的依赖啦:import { Buffer } from 'buffer'

解决代码质量扫描出现的问题

笔者注意到,在安装和构建完npm后,进行代码质量扫描的时候发现了“存在无依赖文件的问题”,如下图所示:

点击上图中的“点击查看”,进入到代码依赖分析面板,在左侧选择无依赖文件,可以发现有两个无依赖文件:

在无依赖文件上点击右键,然后点击打开:

可以看到这个package.json是miniprogram目录下的package.json:

我们可以通过project.config.json文件的packOptions.ignore 字段对这两个文件进行忽略:

{
  "packOptions": {
    "ignore": [
        {
          "value": "package-lock.json",
          "type": "file"
        },
        {
          "value": "package.json",
          "type": "file"
        }
      ],
   }
}

这样配置后,重新进行代码扫面可以发现代码质量就没有问题了,如下图所示:

思考:构建的依赖是否会被上传

最后我们思考一个问题:构建后的依赖是否会被上传呢?答案是肯定的,因为这个依赖是必须的,就好比我们进行vue项目开发时package.json中的dependencies字段中的依赖会被打包一样。我们上传一下代码,上传成功后提示如下图所示:

由图可知,miniprogram目录下的package.json和package-lock.json以及node_modules目录没有被打包上传。同时,miniprogram_npm目录下也有文件没被上传,看到这里请不要慌,注意这些文件都是index.js.map文件,项目真正需要的index.js文件已经上传了。如下图所示:

总结

小程序中可以使用npm包后真的可以解放生产力,打开格局,使得小程序也可以开发更复杂的功能。本文详细地介绍了微信小程序中如何安装、构建以及使用npm包,需要注意如下4点:

1.miniprogramRoot用于指定指定小程序源码的目录;当miniprogramRoot 字段不存在时,miniprogramRoot 就是 project.config.json 所在的目录;npm 的 package.json 需要在 project.config.json 定义的 miniprogramRoot 之内。

2.依赖安装成功后,需要点击开发者工具中的菜单栏:工具 --> 构建 npm,对依赖进行构建。

3.miniprogram目录下的package.json文件和package-lock.json文件属于无依赖文件,可以通过设置project.config.json文件的packOptions.ignore 字段对这两个文件进行忽略。

4.构建后的npm依赖会在代码上传的时候被上传,而node_modules等则不会被上传。

本文正在参加「金石计划」,欢迎一起参与!

参考资料

【1】开发辅助 /npm 支持

【2】设置 /项目配置文件

【3】原理介绍

【4】微信小程序使用 npm 包,举例图文详解