千家信息网

微信小程序怎么支持npm

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"微信小程序怎么支持npm"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!npm 支持从
千家信息网最后更新 2026年10月31日微信小程序怎么支持npm

本篇内容介绍了"微信小程序怎么支持npm"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

npm 支持

从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或以上开始,小程序支持使用 npm 安装第三方包。

踩坑之路

由于项目中需要格式化一些日期数据,于是选择了moment,一款JavaScript 日期处理类库

首先使用命令行,安装moment

# 打开小程序根目录cd srcnpm install --production moment

然后按照小程序文档往下操作,直到构建完成

于是我们迫不及待的开始使用moment

import moment from 'moment';let sFromNowText = moment(new Date() - 360000).fromNow();console.log(sFromNowText);// 控制台输出:"6 minutes ago"

moment能够正常工作,但是很快我们发现英文不是我们想要的

于是我们找到moment的国际化配置,并设置全局语言为中文

import moment from 'moment';moment.locale('zh-cn');let sFromNowText = moment(new Date() - 360000).fromNow();console.log(sFromNowText);// 可是控制台,依然输出:"6 minutes ago"

尝试输出moment.locale执行后的返回值

// ...let sLang = moment.locale('zh-cn');console.log(sLang);// 控制台输出:"en"

发现设置语言环境失败了,经过排查和翻阅小程序文档后,发现通过微信开发者工具构建npm后,并不会将语言环境相关文件拷贝到miniprogram_npm目录下,仅将入口js文件及其依赖的模块进行打包处理,进而导致加载中文语言环境失败。以下是摘自小程序文档的一段话:

构建打包分为两种:小程序 npm 包会直接拷贝构建文件生成目录下的所有文件到 miniprogram_npm 中;其他 npm 包则会从入口 js 文件开始走一遍依赖分析和打包过程(类似 webpack)。

快速查看了一下moment源码,发现moment.locale方法,会从./locale/目录下加载语言环境包,于是尝试手动从node_modules/moment/目录下,将中文语言环境包,拷贝到miniprogram_npm目录下

// moment.js// ...function loadLocale(name) { // ... var aliasedRequire = require; aliasedRequire('./locale/' + name); // ...}// ...

经过调试发现,moment定义语言环境时出错,原来是由于构建npm导致入口文件(moment.js)经过打包后更名为index.js导致:Error: module "miniprogram_npm/moment/moment" is not defined

// zh-cn.js(function(global, factory) { typeof exports === 'object' && typeof module !== 'undefined' && typeof require === 'function'  ? factory(require('../moment'))  : typeof define === 'function' && define.amd   ? define(['../moment'], factory)   : factory(global.moment);})(this, function(moment) { 'use strict'; var zhCn = moment.defineLocale('zh-cn', {  // ... }); return zhCn;});

果然手动将'../moment'统一改为'../index',然后重新执行

import moment from 'moment';moment.locale('zh-cn');let sFromNowText = moment(new Date() - 360000).fromNow();console.log(sFromNowText);// 现在控制台,输出:"6 分钟前"

大功告成,nice! 但也别忘了回过头来,总结一下导致这几个问题的原因:

  • 构建npm会将npm包的入口文件(eg: moment.js),打包后更名为index.js

  • 构建npm仅将npm包的入口js文件及其依赖的模块进行打包处理,并不会将该npm包下一些可选的文件(eg: moment的语言环境包)拷贝到miniprogram_npm目录下

miniprogram_npm 、构建npm及更多npm支持相关信息,请翻阅小程序文档-npm支持

"微信小程序怎么支持npm"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

程序 文件 语言 环境 支持 目录 输出 入口 拷贝 控制台 文档 控制 更多 中文 处理 内容 工具 开发者 手动 日期 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 河南云网互联网络科技有限公司 科技互联网龙头 互联网科技公司的优势 互联网科技有限公司图片 互联网科技社 未来的互联网科技 新浪科技互联网 互联网科技公司有哪些 科技类的互联网平台 互联网为啥属于高科技 玉溪新华互联网科技好不好 滨湖区互联网智能科技产品有哪些 伍佰万互联网科技怎么赚钱 抖集互联网科技技术咨询 全球科技与互联网公司市值变化 吉林省码上互联网科技电话 好易买互联网科技 10位科技互联网大佬 中国主要互联网科技公司 中国互联网有什么科技含量 欧洲十大科技互联网公司 中国科技创新与世界互联网大会 西安小鹰速贷互联网科技有限公司 华夏恒生科技与互联网科技 明优互联网科技有限公司 徐州市互联网科技有限公司 无锡工业互联网科技有限公司 上海科技产业互联网平台 互联网营销推广黑科技
0