微信小程序使用第三方库Underscore.js步骤详解


Posted in Javascript onSeptember 27, 2016

前言

Underscore.js是一个很精干的库,压缩后只有4KB。Underscore 提供了100多个函数,包括常用的:map、filter、invoke — 当然还有更多专业的辅助函数,如:函数绑定、JavaScript 模板功能、创建快速索引、强类型相等测试等等。弥补了标准库的不足,大大方便了JavaScript的编程。

微信小程序无法直接使用require( 'underscore.js' )进行调用。

微信小程序模块化机制

微信小程序运行环境支持CommoJS模块化,通过module.exports暴露对象,通过require来获取对象。

微信小程序Quick Start utils/util.js

function formatTime(date) {
 var year = date.getFullYear()
 var month = date.getMonth() + 1
 var day = date.getDate()

 var hour = date.getHours()
 var minute = date.getMinutes()
 var second = date.getSeconds();


 return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

function formatNumber(n) {
 n = n.toString()
 return n[1] ? n : '0' + n
}

module.exports = {
 formatTime: formatTime
}

pages/log/log.js

var util = require('../../utils/util.js')
Page({
 data: {
 logs: []
 },
 onLoad: function () {
 this.setData({
 logs: (wx.getStorageSync('logs') || []).map(function (log) {
 return util.formatTime(new Date(log))
 })
 })
 }
})

原因分析

Underscore CommonJs模块导出代码如下:

// Export the Underscore object for **Node.js**, with
// backwards-compatibility for the old `require()` API. If we're in
// the browser, add `_` as a global object.
if (typeof exports !== 'undefined') {
 if (typeof module !== 'undefined' && module.exports) {
 exports = module.exports = _;
 }
 exports._ = _;
} else {
 root._ = _;
}

exports、module必须都有定义,才能导出。通过测试,微信小程序运行环境exports、module并没有定义

//index.js

//获取应用实例
var app = getApp();

Page({ 

 onLoad: function () {
 console.log('onLoad');
 var that = this;

 console.log('typeof exports: ' + typeof exports); 
 console.log('typeof module: ' + typeof exports); 

 var MyClass = function() {

 }

 module.exports = MyClass;

 console.log('typeof module.exports: ' + typeof module.exports); 
 }
})

微信小程序使用第三方库Underscore.js步骤详解

解决方法

修改Underscore代码,注释原有模块导出语句,使用module.exports = _ 强制导出

/*
 // Export the Underscore object for **Node.js**, with
 // backwards-compatibility for the old `require()` API. If we're in
 // the browser, add `_` as a global object.
 if (typeof exports !== 'undefined') {
 if (typeof module !== 'undefined' && module.exports) {
 exports = module.exports = _;
 }
 exports._ = _;
 } else {
 root._ = _;
 }
 */

 module.exports = _;
/*
 // AMD registration happens at the end for compatibility with AMD loaders
 // that may not enforce next-turn semantics on modules. Even though general
 // practice for AMD registration is to be anonymous, underscore registers
 // as a named module because, like jQuery, it is a base library that is
 // popular enough to be bundled in a third party lib, but not be part of
 // an AMD load request. Those cases could generate an error when an
 // anonymous define() is called outside of a loader request.
 if (typeof define === 'function' && define.amd) {
 define('underscore', [], function() {
 return _;
 });
 }
 */

使用Underscore.js

//index.js

var _ = require( '../../libs/underscore/underscore.modified.js' );

//获取应用实例
var app = getApp();


Page( {

 onLoad: function() {
 //console.log('onLoad');
 var that = this;

 var lines = [];

 lines.push( "_.map([1, 2, 3], function(num){ return num * 3; });" );
 lines.push( _.map( [ 1, 2, 3 ], function( num ) { return num * 3; }) );

 lines.push( "var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);" );
 lines.push( _.reduce( [ 1, 2, 3 ], function( memo, num ) { return memo + num; }, 0 ) );

 lines.push( "var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });" );
 lines.push( _.find( [ 1, 2, 3, 4, 5, 6 ], function( num ) { return num % 2 == 0; }) );

 lines.push( "_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });" );
 lines.push( _.sortBy( [ 1, 2, 3, 4, 5, 6 ], function( num ) { return Math.sin( num ); }) );

 lines.push( "_.indexOf([1, 2, 3], 2);" );
 lines.push( _.indexOf([1, 2, 3], 2) );

 this.setData( {
  text: lines.join( '\n' )
 })
 }
})

微信小程序使用第三方库Underscore.js步骤详解

总结

以上就是微信小程序使用第三方库Underscore.js的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JQuery 入门实例1
Jun 25 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
通过隐藏option实现select的联动效果
Nov 10 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
JavaScript实现队列结构过程
Dec 06 Javascript
微信小程序使用第三方库Immutable.js实例详解
Sep 27 #Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
Sep 27 #Javascript
微信小程序 开发指南详解
Sep 27 #Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 #Javascript
jQuery实现表格文本框淡入更改值后淡出效果
Sep 27 #Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 #Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 #Javascript
You might like
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
详解python调度框架APScheduler使用
2017/03/28 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python实现复制大量文件功能
2019/08/31 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
Python如何实现邮件功能
2020/05/27 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
公司新年寄语
2014/04/04 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
我的中国心演讲稿
2014/09/04 职场文书
保研专家推荐信范文
2015/03/25 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
个人欠条范本
2015/07/03 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL