详解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 相关文章推荐
JavaScript TO HTML 转换
Jun 26 Javascript
Expandable &quot;Detail&quot; Table Rows
Aug 29 Javascript
菜鸟javascript基础整理1
Dec 06 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
Aug 10 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 Javascript
详解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
MYSQL环境变量设置方法
2007/01/15 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python探索之SocketServer详解
2017/10/28 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python读取xml文件方法解析
2020/08/04 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
教师节主题班会方案
2015/08/17 职场文书
装修安全责任协议书
2016/03/22 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书