详解webpack 如何集成第三方js库
YPE html>
å½æä»¬ä½¿ç¨web packæå æ¶ï¼é叏叿å嫿åç¬¬ä¸æ¹åºï¼å°å ¶ä½ä¸ºä¸ä¸ªç¨³å®ççæ¬æä»¶ï¼å¹¶ä½¿ç¨æµè§ç¼åæ¥åå°è¯·æ±çæ°éï¼ä»å¤©ç±ç«ææ¯é¢éå°ç¼å°±å¸¦å¤§å®¶æ¥çç详解webpack å¦ä½éæç¬¬ä¸æ¹jsåºï¼å¸æè½å¸®å°æ¨ã
webpackç³»åç®å½
webpack ç³»å äºï¼webpack ä»ç»&å®è£
webpack ç³»å ä¸ï¼webpack å¦ä½éæç¬¬ä¸æ¹jsåº
webpack ç³»å åï¼webpack å¤é¡µé¢æ¯æ & å ¬å ±ç»ä»¶åç¬æå
webpack ç³»å äºï¼webpack Loaders 模åå è½½å¨
webpack ç³»å å ï¼åç«¯é¡¹ç®æ¨¡æ¿-webpack+gulpå®ç°èªå¨æå»ºé¨ç½²
åºäº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çæ¬å°é¡¹ç®ä¸ï¼
- avalon.js æ¯æIE6+ åç°ä»£æµè§å¨
- avalon.modern.js åéäºIE10+ åHTML5 æ åæµè§å¨
- 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ä¸ï¼
test avalon {{name}}
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")
$("è¿æ¯jqueryçæç").appendTo("body")
6.å¨é¡¹ç®è·¯å¾ä¸ï¼æ§è¡webpack æå æä»¤
$ webpack

7.å¯å¨webpack-dev-server,访é®http://localhost:8080/webpack-dev-server/src/index.html
$ webpack-dev-server

ä¸è¿°æ¯ç±ç«ææ¯é¢éå°ç¼ä¸ºå¤§å®¶å¸¦æ¥ç详解webpack å¦ä½éæç¬¬ä¸æ¹jsåºï¼ç¨åºåè¦æ ¹æ®èªå·±ç项ç®éæ±è¿è¡è§åï¼è¿æ ·å¯¹ç½ç«çåå±ææ¯æå¥½çã
