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

資訊專欄INFORMATION COLUMN

WMOS之webpack篇(一)

int64 / 1154人閱讀

摘要:版本目前最新的版本是,而我也是在此基礎(chǔ)上進(jìn)行學(xué)習(xí)和開(kāi)發(fā)的。能夠?qū)D片進(jìn)行一些處理。目前我還沒(méi)有達(dá)到那種程度,所以一步一步來(lái)。簡(jiǎn)化了文件的創(chuàng)建,以便為您的包提供服務(wù)。的對(duì)象的配置對(duì)象。的作用是來(lái)匹配相應(yīng)的文件。

關(guān)于WMOS

好吧,作為第一個(gè)系列第一篇的內(nèi)容估計(jì)沒(méi)多少人會(huì)看,所以大概會(huì)寫(xiě)的比較爛,還請(qǐng)看的人見(jiàn)諒。至于關(guān)于WMOS是什么,在這篇文章里不是十分重要,就先賣個(gè)關(guān)子,以后(大概吧)會(huì)慢慢跟大家說(shuō)。這里就先當(dāng)做一個(gè)要做的項(xiàng)目就好了?;氐秸}。

Webpack

現(xiàn)在的前端開(kāi)發(fā)不同以前,不是寫(xiě)寫(xiě)html,css,js就OK的。隨著項(xiàng)目的復(fù)雜就會(huì)考慮一些工程化的東西,因?yàn)槿绻泻芏鄸|西都需要我們自己去做會(huì)費(fèi)很多時(shí)間。webpack就是一個(gè)類似gulp或者grunt的工具,不過(guò)它的核心可不只是自動(dòng)化這么簡(jiǎn)單。

版本

目前webpack最新的版本是v3.4.1,而我也是在此基礎(chǔ)上進(jìn)行學(xué)習(xí)和開(kāi)發(fā)的。

不直接聊原理

由于我之前也用過(guò)webpack并且也深入去學(xué)習(xí)了原理的東西,不過(guò)那個(gè)時(shí)候的我太年輕所以只是理解然而讓我說(shuō)出個(gè)一二三四,大概我會(huì)想個(gè)好幾天(其實(shí)就是當(dāng)時(shí)學(xué)的不扎實(shí),嗚嗚)。所以這次做WMOS的目的其實(shí)就是在實(shí)現(xiàn)的過(guò)程中來(lái)深刻理解一些之前學(xué)過(guò)或者學(xué)習(xí)沒(méi)接觸的東西。這也就是探索式學(xué)習(xí)。

看文檔

我在使用webpack之前,首先看了一下當(dāng)前的版本,這是一定要注意的事。因?yàn)橛行゛pi在不同的版本可能有所差異,在之后的使用的時(shí)候很有可能成為坑點(diǎn)。

而在看完文檔的概念和指南之后,雖然對(duì)如何使用有了大致的了解,可是實(shí)際使用的話總感覺(jué)自己沒(méi)看一樣,emmmmmm。

不過(guò)看過(guò)文檔起碼在看別人的webpack配置文件的時(shí)候就可以稍微讀懂了。

你想做什么

看過(guò)很多遍文檔(中文)后,發(fā)現(xiàn)自己依然沒(méi)有頭緒(撓頭)。突然就想到我到底用webpack做什么?用webpack做什么?做什么?這是很重要的一件事,說(shuō)三遍。

于是我重新開(kāi)始,想想我目前到底想要什么功能?

WMOS打算使用原生的js寫(xiě),并且使用ES2015。

使用less預(yù)編譯器。

能夠?qū)D片進(jìn)行一些處理。

能夠熱更新

。。。。

貌似目前就只有這些需求,雖然我知道這一定不是全部。但是我認(rèn)為項(xiàng)目是一點(diǎn)一點(diǎn)搭起來(lái)的。目前我還沒(méi)有達(dá)到那種程度,所以一步一步來(lái)。

干貨來(lái)了

說(shuō)了這么久,是為什么?因?yàn)槲医裉煸诖罱╳ebpack環(huán)境的時(shí)候,卡在HtmlWebpackPlugin,好痛苦~~(>_<)~~。

什么是HtmlWebpackPlugin

官網(wǎng)在它的指南里是這么引出的:

在更改了入口文件的時(shí)候,會(huì)生成新的文件,而我們的index.html文件還是引用舊的問(wèn)卷。這個(gè)時(shí)候就要用HtmlWebpackPlugin。

HtmlWebpackPlugin簡(jiǎn)化了HTML文件的創(chuàng)建,以便為您的webpack包提供服務(wù)。這對(duì)于在文件名中包含每次會(huì)隨著變異會(huì)發(fā)生變化的哈希的webpack bundle尤其有用。 您可以讓插件為您生成一個(gè)HTML文件,使用lodash模板提供您自己的模板,或使用您自己的loader?!?/p>

以上都是官網(wǎng)給出的內(nèi)容。其實(shí)目前我使用之后的感覺(jué)就是:可以為我們生產(chǎn)html文件,并且直接把那些生產(chǎn)的bundle文件直接寫(xiě)入html中。這個(gè)在想要實(shí)現(xiàn)熱更新的時(shí)候是很有用的。最后在通過(guò)下面的例子在理解一下HtmlWebpackPlugin

最初的時(shí)候目錄是這樣的:

你會(huì)發(fā)現(xiàn)在dist文件夾下什么都沒(méi)有,dist文件夾是我們生產(chǎn)文件的地方,src文件夾是我們的源文件夾。然后看一下我們的webpack配置文件:

使用過(guò)webpack的同學(xué)知道,在運(yùn)行webpack之后應(yīng)該生產(chǎn)在dist文件夾里生成main.js,而這個(gè)js文件需要我們手動(dòng)放入html文件中。不過(guò)這里通過(guò)HtmlWebpackPlugin我們就不用手動(dòng)操作了。讓我們執(zhí)行一下:

原來(lái)的index.html:

現(xiàn)在的index.html:

下面來(lái)詳細(xì)講一下HtmlWebpackPlugin插件。

安裝
npm install --save-dev html-webpack-plugin
基本用法

該插件會(huì)為您生成一個(gè)HTLM5文件,其中會(huì)包括使用script標(biāo)簽引用的js輸出文件。最進(jìn)本的用法就是將插件直接添加到webpack配置中,如下:

var HtmlWebpackPlugin = require("html-webpack-plugin");

var webpackConfig = {
  entry: "index.js",
  output: {
    path: "dist",
    filename: "index_bundle.js"
  },
  plugins: [new HtmlWebpackPlugin()]
};

這將會(huì)產(chǎn)生一個(gè)包含以下內(nèi)容的文件 dist/index.html:



  
    
    webpack App
  
  
    
  

如果有多個(gè)webpack入口,就會(huì)生成多個(gè)script標(biāo)簽引用這些文件。

如果你有任何CSS assets 在webpack的輸出中(例如,利用ExtractTextPlugin提取CSS),那么這些將被包含在HTML head中的標(biāo)簽內(nèi)。

配置

下面是HtmlWebpackPlugin插件的一些配置選項(xiàng):

title: 生成的html文檔的title標(biāo)簽之間的內(nèi)容。

filename: 生成html文件的名字,默認(rèn)為index.html。你可以使用子目錄的形式,像asset/admin.html是OK的。

template: webpack會(huì)require這個(gè)路徑的文件作為模板。(我就卡這里了,稍后會(huì)詳細(xì)講一下)

inject: 它有四個(gè)值,分別為truehead、"body"、"false",功能是在將所有的資源輸出到template或者templateContent指定的文件里的時(shí)候,當(dāng)inject的值為true或者body的時(shí)候,所有JavaScript資源將放置在body元素的下面;當(dāng)值為head的時(shí)候,將放置在head元素內(nèi)。

favicon: 將給定的favicon路徑下的文件輸出到html文件里。

minify: 通過(guò)使用一個(gè)以html-minifier的配置選項(xiàng)作為內(nèi)容的對(duì)象的時(shí)候會(huì)壓縮輸出html文件。使用false你懂得。

hash: 值為true | false。如果為true的時(shí)候添加一個(gè)唯一的webpack編寫(xiě)的hash值到所有的script文件和css文件。對(duì)于緩存清除很有用。

cache: true | false。如果為true(默認(rèn))則只有當(dāng)文件內(nèi)容改變的時(shí)候,會(huì)生成一個(gè)新的文件。

showErrors: true" | false。如果為true`(默認(rèn)),則錯(cuò)誤信息寫(xiě)入html頁(yè)面。

chunks: Allows you to add only some chunks (e.g. only the unit-test chunk)

chunksSortMode: Allows to control how chunks should be sorted before they are included to the html. Allowed values: "none" | "auto" | "dependency" |"manual" | {function} - default: "auto"

excludeChunks: Allows you to skip some chunks (e.g. don"t add the unit-test chunk)

xhtml: true | false If true render the link tags as self-closing, XHTML compliant. Default is false

生成多個(gè)HTML文件

如果要生成多個(gè)html問(wèn)卷,只要多聲明幾次就OK了。

{
  entry: "index.js",
  output: {
    path: __dirname + "/dist",
    filename: "index_bundle.js"
  },
  plugins: [
    new HtmlWebpackPlugin(), // Generates default index.html
    new HtmlWebpackPlugin({  // Also generate a test.html
      filename: "test.html",
      template: "src/assets/test.html"
    })
  ]
}
編寫(xiě)自己的模板

如果它默認(rèn)生成的模板不能滿足我們,我們可以自己去編寫(xiě)自己的模板。我們可以通過(guò)template屬性傳遞我們自己的html文件。html-webpack-plugin將會(huì)自動(dòng)將所有必要的css,js,manifest和favicon文件注入里面。

模板默認(rèn)使用ejs模板。如下方式:

plugins: [
  new HtmlWebpackPlugin({
    title: "Custom template",
    template: "my-index.ejs", // Load a custom template (ejs by default see the FAQ for details)
  })
]


  
    
    <%= htmlWebpackPlugin.options.title %>
  
  
  

如果你打算使用其他的模板,就需要使用對(duì)應(yīng)的loader進(jìn)行解析。如下使用了hbs模板:

module: {
  loaders: [
    { test: /.hbs$/, loader: "handlebars" }
  ]
},
plugins: [
  new HtmlWebpackPlugin({
    title: "Custom template using Handlebars",
    template: "my-index.hbs"
  })
]

注意一點(diǎn)就是如果你使用了.html文件作為模板,那么就會(huì)使用html-loader去解析,所以不要忘記使用html-loader。(我就卡到這里,不過(guò)原因并不是這樣。)

注入的對(duì)象

在模板中可以使用一下變量:

htmlWebpackPlugin: 這個(gè)插件的對(duì)象(我理解)

htmlWebpackPlugin.files: webpack的stats對(duì)象的assetsByChunkName
表示。它包含輸入的文件名到bundle文件名,例如:

"htmlWebpackPlugin": {
  "files": {
    "css": [ "main.css" ],
    "js": [ "assets/head_bundle.js", "assets/main_bundle.js"],
    "chunks": {
      "head": {
        "entry": "assets/head_bundle.js",
        "css": [ "main.css" ]
      },
      "main": {
        "entry": "assets/main_bundle.js",
        "css": []
      },
    }
  }
}

htmlWebpackPlugin.options: 轉(zhuǎn)遞給插件的options選項(xiàng),除了插件使用的
選項(xiàng)以外,你可以通過(guò)這個(gè)hash列表傳遞任何數(shù)據(jù)給模板。也就是說(shuō)你在設(shè)置插件選項(xiàng)

的時(shí)候,可以添加一些自己的數(shù)據(jù)。然后可以在模板中通過(guò)插件的options來(lái)使用。

webpack: webpack的stats對(duì)象

webpackConfigwebpack的配置對(duì)象。

我遇到的坑點(diǎn)

我使用了html文件作為模板,它需要使用html-loader進(jìn)行解析,html-loader支持es6模板的寫(xiě)法,也就是${}這樣。在寫(xiě)loader的時(shí)候,我是這樣寫(xiě)的:

module: {
    rules: [
      {
        test: /.html$/,
        loader:"html-loader"
      }
    ]
},

我們模板是醬紫:




    
    
    
    ${ htmlWebpackPlugin.options.title }


    

WMOS

但是這樣寫(xiě)之后,它并沒(méi)有把title解析掉:




    
    
    
    ${ htmlWebpackPlugin.options.title }


    

WMOS

而將test那部分改為`test: "/.html$/"的時(shí)候,就完美的解析了。

What?我也很懵逼。test的作用是來(lái)匹配相應(yīng)的文件。而test的值可以是字符串,正則,函數(shù)等等??催^(guò)文檔之后,我也并沒(méi)有發(fā)現(xiàn)使用它們會(huì)有什么不同的結(jié)果。

over day

今天就先寫(xiě)到這里,目前我們遇到了一個(gè)奇葩不過(guò)不是重點(diǎn)的問(wèn)題,所以我們先將它記下來(lái),在之后會(huì)去一一解決這些問(wèn)題。

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

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

相關(guān)文章

  • webpack進(jìn)階loader

    webpack的loaders是一大特色,也是很重要的一部分。這遍博客我將分類講解一些常用的laodershowImg(https://segmentfault.com/img/remote/1460000005742040); 一、loaders之 預(yù)處理 css-loader 處理css中路徑引用等問(wèn)題 style-loader 動(dòng)態(tài)把樣式寫(xiě)入css sass-loader scss編譯器 ...

    qylost 評(píng)論0 收藏0
  • webpack進(jìn)階插件

    摘要:基本環(huán)境搭建就不展開(kāi)講了一插件篇自動(dòng)補(bǔ)全前綴官方是這樣說(shuō)的,也就是說(shuō)它是一個(gè)自動(dòng)檢測(cè)兼容性給各個(gè)瀏覽器加個(gè)內(nèi)核前綴的插件。 上一篇博客講解了webpack環(huán)境的基本,這一篇講解一些更深入的內(nèi)容和開(kāi)發(fā)技巧。基本環(huán)境搭建就不展開(kāi)講了showImg(http://static.xiaomo.info/images/webpack.png); 一、插件篇 1. 自動(dòng)補(bǔ)全css3前綴 autop...

    Tonny 評(píng)論0 收藏0
  • webpack使用基礎(chǔ)

    摘要:是一個(gè)和差不多同時(shí)代的產(chǎn)物,但是它只支持基于,對(duì)于來(lái)說(shuō)只能興嘆了。找一個(gè)自己順手的就好,順便一提,我現(xiàn)在主要使用輔助。 說(shuō)到自動(dòng)化構(gòu)建,你想到了什么?基于AMD的requirejs?還是基于commoJS的browserify?他們都在各自的領(lǐng)域或者說(shuō)時(shí)代發(fā)揮了很重要的作用。但是時(shí)代的變遷,webpack成了現(xiàn)在的佼佼者,我們不知道什么時(shí)候wepback也會(huì)被取代,但是現(xiàn)在我們必須要掌...

    zhichangterry 評(píng)論0 收藏0
  • 20170622-webpackplugin

    摘要:該插件的作用是為組件分配,通過(guò)這個(gè)插件會(huì)分析使用頻率最多的模塊,并未他們分配最小的,越小表示模塊被找到的速度會(huì)更快使用方法用于抽取公共的模塊 extract-text-webpack-plugin extract-text-webpack-plugin主要是為了抽離css樣式,并將樣式打包成css文件 const ExtractTextPlugin = require(extract-...

    Dean 評(píng)論0 收藏0
  • Vue ES6 Jade Scss Webpack Gulp

    摘要:主有前端后端,并加,各一名。本著工欲善其事,必先利其器的理念,一直以來(lái)在工作效率這塊,略懷執(zhí)念一個(gè)問(wèn)題不應(yīng)該被解決兩次。下圖為開(kāi)發(fā)項(xiàng)目機(jī)制所涉及到的插件工欲善其事,必先利其器,語(yǔ)言,框架皆可以歸結(jié)為器而不當(dāng)僅局限于開(kāi)發(fā)工具以及機(jī)。 原文鏈接: http://www.jeffjade.com/2016/05/08/106-vue-es6-jade-scss-webpack-gulp/ 一...

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

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

0條評(píng)論

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