详解webpack 如何集成第三方js库


Posted in Javascript onJune 29, 2017

webpack系列目录

基于webpack搭建纯静态页面型前端工程解决方案模板, 最终形态源码见github: https://github.com/ifengkou/webpack-template

正文

本篇主要介绍如何集成常用的js库,以avalon 和jquery 为例,同理可扩展到其他js库。更高级的功能见后续文章。更高级的功能见后续文章

avalon 是国内的一个轻量级 MVVM js框架,只是以此为例 并不仅限于它

集成avalon

由于项目用到了Avalon这个MVVM框架,webpack是兼容多种类型的加载器(AMD,CMD),平常用的avalon.js是自带加载器,用webpack打包时avalon,只能选用avalon的shim无加载器版本,而avalon 目前只有1.4有shim的版本,且不能通过npm install,所以只好到github 下载shim版本的avalon。其中avalon1.4 有3个version,可以根据项目需要下载相应的shim版本到项目中:

  1. avalon.js 支持IE6+ 和现代浏览器
  2. avalon.modern.js 合适于IE10+ 和HTML5 标准浏览器
  3. avalon.mobile.js 支持移动设备(增加了Touch Event,Pointer,Event,fastclick)

基础结构和准备工作

首先得安装上npm,再其次安装webpack

npm install webpack -g

新建项目,项目的目录结构说明

.
├── package.json  # 项目配置
├── src   # 源码目录
│ ├── pageA.html  # 入口文件a
│ ├── pageB.html  # 入口文件b
│ ├── css/   # css资源
│ ├── img/   # 图片资源
│ ├── js   # js&jsx资源
│ │ ├── pageA.js  # a页面入口
│ │ ├── pageB.js  # b页面入口
│ │ ├── lib/  # 没有存放在npm的第三方库或者下载存放到本地的基础库,如jQuery、Zepto、avalon
│ ├── pathmap.json  # 手动配置某些模块的路径,可以加快webpack的编译速度
├── webpack.config.js  # webpack配置入口

新建package.json文件,复制以下内容执行npm install

{
 "name": "webpack-template",
 "version": "1.0.0",
 "description": "webpack-template"
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "sloong",
 "license": "MIT",
 "devDependencies": {
 "css-loader": "^0.21.0",
 "file-loader": "^0.8.5",
 "style-loader": "^0.13.0",
 "url-loader": "^0.5.7",
 "webpack": "^1.13.1",
 "webpack-dev-server": "^1.14.1"
 }
}

集成Avalon

1.下载的avalon.shim.js 放到 src/js/lib 下(同理jquery,zepto)

2.在src目录下增加 pathmap.json,手动配置某些模块的路径,可以加快webpack的编译速度

{
"avalon": "js/lib/avalon.shim.js"
}

备注:其他依赖js模块同理,例如:avalon + jquery(或者zepto等等)

{
"jquery": "js/lib/jquery-1.12.4.js",
"avalon": "js/lib/avalon.shim.js"
}

3.配置webpack.config.js

var webpack = require("webpack");
var path = require("path");
var pathMap = require('./src/pathmap.json');
var srcDir = path.resolve(process.cwd(), 'src');
var nodeModPath = path.resolve(__dirname, './node_modules');
module.exports = {
entry: "./src/js/index.js",//入口js,可为数组
output: {
 path: path.join(__dirname, "dist"),
 filename: "bundle.js"
},
module: {
 loaders: [
 {test: /\.css$/, loader: 'style-loader!css-loader'}
 ]
},
resolve: {
 extensions: ['.js',"",".css"],
 root: [srcDir,nodeModPath],
 alias: pathMap,
 publicPath: '/'
}
}

4.新增index.html,引用了 dist/bundle.js(webpack 会解析入口文件index.js,将依赖项全部打包到bundle.js中)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test avalon</title>
</head>
<body>
<div ms-controller="avalonCtrl">
<h1>{{name}}</h1>
</div>
<script src="../dist/bundle.js"></script>
</body>
</html>

5.新增index.js。需要用哪个js库,就require('3rd-jslib')进来,webpack会将根据依赖项将所需的lib库打包到目标js文件中

var avalon = require('avalon');
avalon.define({
$id: "avalonCtrl",
name: "Hello Avalon!"
});
//jquery 测试
var $ = require("jquery")
$("<div>这是jquery生成的</div>").appendTo("body")

6.在项目路径下,执行webpack 打包指令

$ webpack

详解webpack 如何集成第三方js库

7.启动webpack-dev-server,访问http://localhost:8080/webpack-dev-server/src/index.html

$ webpack-dev-server

详解webpack 如何集成第三方js库

OK ,顺利集成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
js判断url是否有效的两种方法
Mar 04 Javascript
移动手机APP手指滑动切换图片特效附源码下载
Nov 30 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
jQuery实现遮罩层登录对话框
Dec 29 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
详解Ant Design of React的安装和使用方法
Dec 27 Javascript
vue组件之间数据传递的方法实例分析
Feb 12 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 #Javascript
基于node.js制作简单爬虫教程
Jun 29 #Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 #Javascript
详解webpack自动生成html页面
Jun 29 #Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 #Javascript
详解webpack分包及异步加载套路
Jun 29 #Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 #Javascript
You might like
PHP微信支付开发实例
2016/06/22 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
JSON 数据格式详解
2017/09/13 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
python插入排序算法的实现代码
2013/11/21 Python
Python break语句详解
2014/03/11 Python
python 七种邮件内容发送方法实例
2014/04/22 Python
Python正则表达式匹配HTML页面编码
2015/04/08 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
python学习教程之使用py2exe打包
2017/09/24 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
python并发编程之线程实例解析
2017/12/27 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
python语言的优势是什么
2020/06/17 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
财产保全担保书范文
2014/04/01 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
通知的格式范文
2015/04/27 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
springboot读取nacos配置文件
2022/05/20 Java/Android