详解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 setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
关于jquery css的使用介绍
Apr 18 Javascript
js字符串转成JSON
Nov 07 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
javascript中arguments,callee,caller详解
Mar 16 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 Javascript
Vue监视数据的原理详解
Feb 24 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语法(5)
2006/10/09 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js中document.write的那点事
2014/12/12 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
javascript实现简单打字游戏
2019/10/29 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
大学生创业计划书的格式要求
2013/12/29 职场文书
小学安全教育材料
2014/02/17 职场文书
国培远程培训感言
2014/03/08 职场文书
村抢险救灾方案
2014/05/09 职场文书
农村党员一句话承诺
2014/05/30 职场文书
实验心得体会
2014/09/05 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
部门2014年度工作总结
2014/11/12 职场文书
活动主持人开场白
2015/05/28 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书