详解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åºï¼ç¨åºåè¦æ ¹æ®èªå·±ç项ç®éæ±è¿è¡è§åï¼è¿æ ·å¯¹ç½ç«çåå±ææ¯æ好çã