成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

前端webpack workflow(二)——Webpack基本使用

LeexMuller / 2580人閱讀

摘要:還可以用作文件加載使用,詳細(xì)請(qǐng)看。實(shí)用命令除了簡(jiǎn)單運(yùn)行,還可以添加幾個(gè)參數(shù),方便部署文件處理。以上僅僅介紹了前端開(kāi)發(fā)最基本的用法,更多參數(shù)以及功能使用,參考官網(wǎng)

作者:Jogis
原文鏈接:https://github.com/yesvods/Blog/issues/3
轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息

前一篇文章介紹了webpack以及安裝方法,這次將會(huì)介紹webpack在單頁(yè)面應(yīng)用程序(Single Page Application)與多頁(yè)面站點(diǎn)不同場(chǎng)合的用法。

輸入與輸出

跟其他模塊加載器類(lèi)似,webpack也是需要配置一個(gè)入口文件,比如是entry.js
有幾種配置方式,下面來(lái)介紹一下直接把入口文件寫(xiě)在配置文件 webpack.config.js:

module.exports = {
  entry: {
    "entry":"./entry.js"
  },
  output: {
    path: "build",
    filename: "bundle.js"
  }
}

通過(guò)命令行

> webpack

很便利地,webpack檢測(cè)配置文件,讀取模塊入口與輸出路徑和文件名,將文件依賴(lài)整合成一個(gè)文件,輸出到build/bundle.js

通過(guò)在HTML簡(jiǎn)單引入

就可以在瀏覽器運(yùn)行。

加載器

簡(jiǎn)單的SPA程序加載,包括:JS編譯與加載、CSS編譯與加載、圖片加載與壓縮、JS與CSS壓縮。

Webpack提供了一套加載器機(jī)制,比如:css-loader、style-loader、url-loader等,用于將不同資源加載到j(luò)s文件中,例如url-loader用于在js中加載png/jpg格式的圖片文件,css/style loader 用于加載css文件,less-loader用于將less文件編譯成css。

下面介紹一些常用的加載器(詳細(xì)介紹在這里):

style+css+less加載Bootstrap less版本:

require("style!css!less!./bower_components/bootstrap/bootstrap.less");

style+css 加載一般樣式文件:

require("style!css!./styles/main.css");

url 加載圖片資源文件:

require("url!./images/logo.png");

json loader加載json格式文件:

require("json!./data.json");

js后綴的文件不需要使用加載器

require("./scripts/main.js");

coffee script加載

require("coffee!./scripts/main.coffee");

喜歡嘗鮮的童鞋可以通過(guò)Babel loader體驗(yàn)ES6/7特性:

require("babel!./scripts/es6.js");

需要注意的是,避免用babel作為加載器加載所有node_module模塊,會(huì)出現(xiàn)意外結(jié)果,而且大量加載情況下,加載時(shí)間很長(zhǎng)。babel還可以用作reactjs jsx文件加載使用,詳細(xì)請(qǐng)看。

配置加載器

剛剛介紹了行內(nèi)加載資源的方式,如果有很多css或者圖片資源需要加載,重復(fù)寫(xiě)加載器顯得很笨拙,webpack提供另一種方式加載資源。
在配置文件添加配置:

module.exports = {
  module: {
    loaders: [
      {test: /.css$/, loader: "style!css"},
      {test: /.(png|jpg)$/, loader: "url-loader?limit=8192"}
    ]
  }
}

其中test是正則表達(dá)式,對(duì)符合的文件名使用相應(yīng)的加載器
/.css$/會(huì)匹配 xx.css文件,但是并不適用于xx.sass或者xx.css.zip文件
/.css/除了匹配xx.css也可以匹配xx.css.zip

加載器后可以加入?xx=yy傳遞參數(shù),表示添加將xx設(shè)置為yy(跟http地址Q(chēng)uery很像)

需要注意的是,使用加載器前需要使用

> npm i --save xxx-loader

安裝相應(yīng)加載器,并通過(guò)--save把依賴(lài)配置到package.json中,使用加載器并不需要使用require引入。

搜索路徑變量

以上介紹的加載器,可以很方便使用webpack整合日常資源,如果認(rèn)為webpack僅僅只能做這些,那就讓您失望了。

可以看到,以上加載資源時(shí)候,都使用相對(duì)路徑來(lái)描述路徑,對(duì)于那些./app/src/scripts/main.js通過(guò)修改webpack配置文件,添加默認(rèn)搜索路徑后,顯得更加優(yōu)雅。

// webpack.config.js
var path = require("path")
module.exports = {
  resolve: {
    alias: {
      js: path.join(__dirname, "./app/src/scripts")
    }
  }
}
更改配置文件后加載:
require("js/main.js");

默認(rèn)搜索路徑配置

對(duì)于bower_components死忠們,前端開(kāi)發(fā)少不了幾個(gè)bower插件,使用gulp可以通過(guò)gulp-wiredep來(lái)動(dòng)態(tài)把bower.json dependencies加載到指定HTML文件。
在webpack也有非常便利的導(dǎo)入方法:
首先,加入配置

module.exports = {
  resolve: {
    alias: {
      js: path.join(__dirname, "src/scripts"),
      src: path.join(__dirname, "src/scripts"),
      styles: path.join(__dirname, "src/styles"),
      img: path.join(__dirname, "src/img")
    },
    root: [
      path.join(__dirname, "bower_components")
    ]
  },
  plugins: [
    new webpack.ResolverPlugin(
        new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin(".bower.json", ["main"])
      )
  ]
}

resolve.root 表示添加默認(rèn)搜索路徑,使用如下語(yǔ)法:

require("jquery");

webpack會(huì)在bower_components/jquery目錄下進(jìn)行查找CommandJS模塊node_module/index.js、index.js
但是,因?yàn)锽ower不屬于CommandJS規(guī)范范疇,使用的是bower.json main屬性指定項(xiàng)目入口文件
說(shuō)到這里,大家就知道plugins里面那串東東是干嘛的啦

之后,我們就可以很方便在任何js文件里面引用jquery:

var jQuery = $ = require("jquery");

需要注意的是,require的并非jquery.js,而是bower_components目錄下的文件夾名

多頁(yè)面開(kāi)發(fā)

webpack 不僅僅適用于SPA開(kāi)發(fā),對(duì)于多頁(yè)面站點(diǎn),webpack支持得很好,通過(guò)更改配置文件為多入口:

module.exports = {
  entry: {
    "entry":"./src/scripts/entry.js",
    "swiperEffect":"./src/scripts/swiperEffect.js"
  },
  output: {
    path: "build"
    filename: "[name].bundle.js"
  }
}

output設(shè)置里面,[name]代表entry的每一個(gè)鍵值,因此運(yùn)行webpack時(shí)候,會(huì)輸出對(duì)應(yīng)的兩個(gè)文件:

build/entry.bundle.js
build/swiperEffect.bundle.js

然后就可以在index.html和about.html兩個(gè)頁(yè)面分別引用啦

文件分離

前端工程一項(xiàng)就是減少http請(qǐng)求,這表示需要把多個(gè)js合并成一個(gè),但是,單個(gè)js文件過(guò)大會(huì)影響瀏覽器加載文件速度,由于現(xiàn)在瀏覽器并發(fā)http請(qǐng)求多達(dá)6個(gè),可以利用這個(gè)特性,將可復(fù)用第三方資源庫(kù)分離加載。

使用CommandJS規(guī)范的

//entry.js
require.ensure(["jquery", "imgScroll"], function(require){
  var $ = require("jquery");
  require("imgScroll");
  $("#container").scroll({
    XXX
  })
})

通過(guò)require.ensure聲明的文件,稱(chēng)作按需加載依賴(lài),這些依賴(lài)會(huì)獨(dú)立出來(lái)一個(gè)文件,待入口模塊加載完,需要請(qǐng)求時(shí)候才會(huì)相繼加載

再次編譯webpack:

build/entry.bundle.js
build/swiperEffect.bundle.js
build/2.2.bundle.js

其中2.2.bundle.js就是jquery+imgScroll異步加載內(nèi)容
一圖勝千言:

可以看到2.2.bundle.js在entry.bundle.js加載完后進(jìn)行異步加載。

webpack 實(shí)用命令

除了簡(jiǎn)單運(yùn)行webpack,還可以添加幾個(gè)參數(shù),方便部署文件處理。

輸出js文件,經(jīng)過(guò)uglify進(jìn)行壓縮:

> webpack -p

自動(dòng)監(jiān)聽(tīng)變化,動(dòng)態(tài)運(yùn)行webpack編譯:

> webpack --watch

通常Dev階段,使用--watch配合live-server就可以自動(dòng)化開(kāi)發(fā)繁瑣的窗口切換與回車(chē)。

以上僅僅介紹了webpack前端開(kāi)發(fā)最基本的用法,更多參數(shù)以及功能使用,參考官網(wǎng)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111204.html

相關(guān)文章

  • 前端webpack workflow)——Webpack基本使用

    摘要:還可以用作文件加載使用,詳細(xì)請(qǐng)看。實(shí)用命令除了簡(jiǎn)單運(yùn)行,還可以添加幾個(gè)參數(shù),方便部署文件處理。以上僅僅介紹了前端開(kāi)發(fā)最基本的用法,更多參數(shù)以及功能使用,參考官網(wǎng) 作者:Jogis原文鏈接:https://github.com/yesvods/Blog/issues/3轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息 showImg(http://itanguo.cn/wp-content/uploads...

    roadtogeek 評(píng)論0 收藏0
  • 前端webpack workflow)——Webpack基本使用

    摘要:還可以用作文件加載使用,詳細(xì)請(qǐng)看。實(shí)用命令除了簡(jiǎn)單運(yùn)行,還可以添加幾個(gè)參數(shù),方便部署文件處理。以上僅僅介紹了前端開(kāi)發(fā)最基本的用法,更多參數(shù)以及功能使用,參考官網(wǎng) 作者:Jogis原文鏈接:https://github.com/yesvods/Blog/issues/3轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息 showImg(http://itanguo.cn/wp-content/uploads...

    KevinYan 評(píng)論0 收藏0
  • 前端webpack workflow(一)——Webpack入門(mén)

    摘要:開(kāi)發(fā)這樣一款加載器最大原因,就是為了代碼分離以及靜態(tài)資源模塊化無(wú)縫接合。異步方式,將依賴(lài)分割成多個(gè)節(jié)點(diǎn),然后每個(gè)節(jié)點(diǎn)形成一個(gè)新的文件塊。會(huì)處理最常見(jiàn)的模塊標(biāo)準(zhǔn)和。通過(guò)聲明依賴(lài),可以選擇一個(gè)本地的版本,而不需要使用全局聲明的版本。 作者:Jogis 原文鏈接:https://github.com/yesvods/Blog/issues/2 轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息 模塊加載器...

    DevWiki 評(píng)論0 收藏0
  • 前端webpack workflow(一)——Webpack入門(mén)

    摘要:開(kāi)發(fā)這樣一款加載器最大原因,就是為了代碼分離以及靜態(tài)資源模塊化無(wú)縫接合。異步方式,將依賴(lài)分割成多個(gè)節(jié)點(diǎn),然后每個(gè)節(jié)點(diǎn)形成一個(gè)新的文件塊。會(huì)處理最常見(jiàn)的模塊標(biāo)準(zhǔn)和。通過(guò)聲明依賴(lài),可以選擇一個(gè)本地的版本,而不需要使用全局聲明的版本。 作者:Jogis 原文鏈接:https://github.com/yesvods/Blog/issues/2 轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息 模塊加載器...

    khs1994 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

LeexMuller

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<