摘要:一什么是是一個(gè)前端的模塊管理工具,以下是的官網(wǎng),一進(jìn)入官網(wǎng)可以看到下面這張大圖這張圖基本上解釋了是用來干嘛的,將一些相互依賴的模塊文件,打包成一個(gè)或多個(gè)文件,減少請求次數(shù),提升性能。希望這篇文章可以幫助大家入門。
(一)什么是Webpack
Webpack是一個(gè)前端的模塊管理工具(module bundler),以下是webpack的官網(wǎng):http://webpack.github.io/,一進(jìn)入官網(wǎng)可以看到下面這張大圖:
這張圖基本上解釋了webpack是用來干嘛的,將一些相互依賴的模塊(文件),打包成一個(gè)或多個(gè)js文件,減少http請求次數(shù),提升性能。這些相互依賴的模塊可以是圖片、字體、coffee文件、樣式文件、less文件等。
具體怎么用呢?接下來我將用一個(gè)例子來說明:
(二)一個(gè)Webpack+Angular的例子 1.先看下目錄結(jié)構(gòu) 2.安裝Webpack及其他組件安裝Webpack之前建議先安裝Node.js,然后采用npm的方式來安裝Webpack:
npm install webpack -g
因?yàn)橐玫絘ngular,所以要安裝angular:
npm install angular
還要安裝一系列加載器(loader):
npm install style-loader css-loader url-loader sass-loader raw-loader
注意:除了webpack是全局安裝之外,其他組件都是安裝在app文件夾下面,會(huì)自動(dòng)生成node_modules文件夾。
3.配置文件webpack.config.js1 module.exports = { 2 context: __dirname + "/app",//上下文 3 entry: "./index.js",//入口文件 4 output: {//輸出文件 5 path: __dirname + "/app", 6 filename: "./bundle.js" 7 }, 8 module: { 9 loaders: [//加載器 10 {test: /.html$/, loader: "raw"}, 11 {test: /.css$/, loader: "style!css"}, 12 {test: /.scss$/, loader: "style!css!sass"}, 13 {test: /.(png|jpg|ttf)$/, loader: "url?limit=8192"} 14 ] 15 } 16 };4.入口文件index.js
1 var angular = require("angular");//引入angular 2 var ngModule = angular.module("app",[]);//定義一個(gè)angular模塊 3 require("./directives/hello-world/hello-world.js")(ngModule);//引入指令(directive)文件 4 require("./css/style.css");//引入樣式文件
require用于引入外部模塊(可以是對象,可以是函數(shù),可以是css樣式,可以是html頁面等)
5.主頁面index.html1 2 3 4 5Angular with Webpacktitle> 6 7 8Angular + Webpack
910 11 12
可以看到主頁面是非常干凈清爽的,只引入了一個(gè)輸出文件bundle.js,然后html標(biāo)簽里加了ng-app="app"。
6.指令文件hello-world.js1 module.exports = function(ngModule) { 2 ngModule.directive("helloWorld", helloWorldFn);//定義指令,對應(yīng)頁面中的 3 require("./hello-world.scss"); 4 function helloWorldFn() { 5 return { 6 restrict: "E",//元素(element) 7 scope: {}, 8 template: require("./hello-world.html"),//模板 9 //templateUrl: "directives/hello-world/hello-world.html", 10 controllerAs: "vm",// <=> $scope.vm = {greeting: "你好,我是卡哥"} 11 controller: function () { 12 var vm = this; 13 vm.greeting = "你好,我是卡哥,很高興見到你"; 14 } 15 } 16 } 17 }
module.exports用于將模塊(文件)作為一個(gè)接口(一般是一個(gè)函數(shù))暴露給外部。
7.其他文件(style.css、hello-world.html、hello-world.scss)1 @font-face{ 2 font-family: "maozedong"; 3 src: url(../fonts/maozedong.ttf); 4 } 5 body{ 6 background: url(../images/longmao.jpg) yellowgreen; 7 font-size: 24pt; 8 color: #fff; 9 font-family: "maozedong"; 10 }
12 {{vm.greeting}} 3
1 .hello-world { 2 color: red; 3 border: 1px solid green; 4 }8.編譯和運(yùn)行
在命令行工具中輸入:webpack,即可編譯,這時(shí)我們會(huì)遇到第一個(gè)坑:
這個(gè)錯(cuò)誤的關(guān)鍵行在"You may need an appropriate loader to handle the file type",大概意思就是你的加載器(loader)不正確,可是我們明明安裝上了所有的加載器啊,也在配置文件中引用了呀,我在網(wǎng)上找了很久都沒找到問題所在,后來還是一位細(xì)心的同事幫我解決這個(gè)問題的,原來問題出在配置文件中的"module"下的"loader"應(yīng)該是"loaders",就因?yàn)樯倭艘粋€(gè)"s",浪費(fèi)我一上午的時(shí)間。
修改過來之后,編譯通過了,我們在瀏覽器中打開主頁面index.html,這時(shí)遇到了第二個(gè)坑:
大概意思是你跨域了,不能加載hello-world.html這個(gè)文件,問題出在指令文件hello-world.js中的引用模板地址的代碼:
templateUrl: "directives/hello-world/hello-world.html"
在網(wǎng)上搜到一個(gè)解決辦法,就是使用Node.js自帶的的http-server,以下是server.js的代碼:
使用之前要先安裝express:npm install express,然后在命令行工具中輸入node server.js開啟服務(wù),這時(shí)在瀏覽器中輸入:localhost:8000/index.html即可訪問主頁面。
另外一個(gè)方法是用require的方式引入hello-world.html:
template: require("./hello-world.html")
(三)補(bǔ)充(1)編譯的命令"webpack"后面可以加參數(shù),如:
"webpack -p"表示對打包后的文件進(jìn)行壓縮
"webpack -w"表示實(shí)時(shí)進(jìn)行打包更新
"webpack -d"表示提供source map,方便調(diào)試
(2)webpack-dev-server可以提供實(shí)時(shí)監(jiān)視文件變化的功能,使用之前先安裝webpack-dev-server:
npm install webpack-dev-server -g
然后在命令行中輸入:webpack-dev-server --progress --colors,顯示以下結(jié)果:
這時(shí)在瀏覽器中輸入:localhost:8080(localhost:8080/webpack-dev-server),你對靜態(tài)資源的任何改動(dòng)都會(huì)直接反映到主頁面中。
--------------------------------------------------------- 華麗的分割線 ------------------------------------------------
總結(jié):這是一個(gè)Webpack+Angular的典型例子,包含了最基本的打包js文件、css文件、scss文件、圖片、字體的方法。通過這幾天對Webpack的學(xué)習(xí),發(fā)現(xiàn)有關(guān)Webpack的資料確實(shí)是非常少的,百度百科和維基百科上甚至都沒有這個(gè)詞條。希望這篇文章可以幫助大家入門。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78576.html
摘要:所以說的模塊機(jī)制沒有解決文件依賴關(guān)系和文件異步加載的問題。大部分團(tuán)隊(duì)還是停留在第二第三階段,每個(gè)階段的實(shí)現(xiàn)都有很多種選擇。希望這篇文章能夠激起大家永遠(yuǎn)保持積極向前追求完美代碼的心,不僅對自己的成長也會(huì)對公司帶來無限的價(jià)值。 本篇技術(shù)博客來自有著化腐朽為神奇能力的,Worktile 技術(shù)牛人Web 總監(jiān) @徐海峰 大神的分享~滿滿的干貨,你值得擁有! Worktile 的前端構(gòu)建之路 2...
學(xué)習(xí)的過程中收藏了這些優(yōu)秀教程和的項(xiàng)目,希望對你有幫助。 github地址, 有不錯(cuò)的就更新 官方文檔 中文指南 初級教程 webpack-howto 作者:Pete Hunt Webpack 入門指迷 作者:題葉 webpack-demos 作者:ruanyf 一小時(shí)包教會(huì) —— webpack 入門指南 作者:VaJoy Larn webpack 入門及實(shí)踐 作者:...
摘要:所以它在某些程度上,跟的功能有些相同。嚴(yán)格上講,模塊化不是他強(qiáng)調(diào)的東西,他旨在規(guī)范前端開發(fā)流程。更是明顯強(qiáng)調(diào)模塊化開發(fā),而那些文件壓縮合并預(yù)處理等功能,不過是他附帶的功能。 1. webpack 是什么? showImg(https://segmentfault.com/img/remote/1460000012293461); 先來說一下 webpack 是什么。 webpack 的...
摘要:基于構(gòu)建的工程一篇現(xiàn)在都已經(jīng)出到的版本了,可我對它的認(rèn)識(shí)還是停留在的版本。然后是寫啟動(dòng)的命令行,也就是上面的這樣寫的意思是,當(dāng)你輸入你的命令名字就會(huì)讓執(zhí)行你對應(yīng)命令的語句。我們首先把基本的配置引進(jìn)來。 基于webpack構(gòu)建的angular 1.x 工程(一)webpack篇 ??現(xiàn)在AngularJS都已經(jīng)出到4.x的版本了,可我對它的認(rèn)識(shí)還是停留在1.x的版本。 ??之前用它是為...
閱讀 3143·2021-09-22 15:50
閱讀 3343·2021-09-10 10:51
閱讀 3170·2019-08-29 17:10
閱讀 2934·2019-08-26 12:14
閱讀 1849·2019-08-26 12:00
閱讀 970·2019-08-26 11:44
閱讀 665·2019-08-26 11:44
閱讀 2833·2019-08-26 11:41