详解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 相关文章推荐
js打印纸函数代码(递归)
Jun 18 Javascript
window.name代替cookie的实现代码
Nov 28 Javascript
教你在heroku云平台上部署Node.js应用
Jul 30 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
bootstrap监听滚动实现头部跟随滚动
Nov 08 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
Sep 14 Javascript
ES6入门教程之变量的解构赋值详解
Apr 13 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
详解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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python实现维吉尼亚算法
2019/03/20 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python简易版图书管理系统
2019/08/12 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
生物化学研究助理员求职信
2013/10/09 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
个人承诺书格式
2014/06/03 职场文书
中药学自荐信
2014/06/15 职场文书
奶茶店创业计划书
2014/08/14 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python