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

資訊專欄INFORMATION COLUMN

webpack替代fekit的折騰小記

curried / 1199人閱讀

摘要:添加依賴到如何使用依賴當(dāng)你再興建一個(gè)文件的時(shí)候,就不需要一個(gè)個(gè)插件安裝了,將文件復(fù)制到當(dāng)前文件下,并輸入,即通過里的依賴關(guān)系,自動(dòng)把依賴安裝好了。第四步新建配置文件默認(rèn)的配置文件在項(xiàng)目目錄下為。

WilsonLiu"s blog 首發(fā)地址

前言

早就想嘗試webpack的,卻一直沒有時(shí)間,恰逢周末,又時(shí)值最近在公司實(shí)習(xí)的時(shí)候嘗到用fekit做模塊化的構(gòu)建工具的爽。所以就開始以公司的項(xiàng)目結(jié)構(gòu)去使用webpack的,當(dāng)然最后還是有點(diǎn)問題的,只能折中解決了。公司的方案是前后端完全分離,html代碼放在后端服務(wù)器上,css,js,images等資源文件放在前端服務(wù)器,兩者是不同的域名。問過之后,才知道原來是因?yàn)?,js每次請(qǐng)求會(huì)帶上cookie,增加了不必要的帶寬,所以將其放在前端服務(wù)器上,因?yàn)閟cript的標(biāo)簽可以跨域引用(這也是jsonp的原理)。 所以主要的目錄結(jié)構(gòu)大概是,當(dāng)然我說的折中是把html直接放進(jìn)了prd文件夾下,這個(gè)之后要說明原因。

+html
+src
+prd
+fekit-module
安裝

首先,你需要安裝了node.js

第一步,全局安裝

npm install webpack -g

第二步,初始化package.json信息,這個(gè)可以直接回車到底

npm init

第三步,局部安裝webpack,添加依賴到package.json

疑問:沒有使用過相關(guān)構(gòu)建工具的小伙伴,肯定疑惑。為什么全局安裝后還需要局部安裝? 原因:每個(gè)項(xiàng)目需要的依賴不同,如果都安裝在全局,那么不同項(xiàng)目我們就無法做到定制化的服務(wù),而是大鍋粥式的服務(wù),無法滿足高效生產(chǎn)的目標(biāo)。所以需要局部安裝。

npm install webpack --save-dev  //--save-dev 添加依賴到package.json

如何使用依賴?

當(dāng)你再興建一個(gè)文件的時(shí)候,就不需要一個(gè)個(gè)插件安裝了,將package.json文件復(fù)制到當(dāng)前文件下,并輸入npm install,即通過package.json里的依賴關(guān)系,自動(dòng)把依賴安裝好了。當(dāng)然,其他文件結(jié)構(gòu)還是要自己新建。
這里提供一下我的package.json文件。

  {
    "name": "angular",
    "version": "0.0.0",
    "description": "practice",
    "main": "gulpfile.js",
    "scripts": {
      "test": "echo "Error: no test specified" && exit 1"
    },
    "author": "",
    "license": "BSD-2-Clause",
    "devDependencies": {
      "webpack": "~1.12.11",
      "style-loader": "~0.13.0",
      "extract-text-webpack-plugin": "~1.0.1",
      "file-loader": "~0.8.5",
      "url-loader": "~0.5.7",
      "css-loader": "~0.23.1"
    }
  }
第四步 新建配置文件

默認(rèn)的配置文件在項(xiàng)目目錄下為 webpack.config.js。 簡(jiǎn)單的操作可以參看下面這個(gè)文檔。 《Webpack 中文指南》

恭喜入坑

完成,上面四步,可以說你就已經(jīng)走進(jìn)了webpack的大門了。 但是,要想個(gè)性化的定制服務(wù),理解每一個(gè)參數(shù)~ 查看了許多博客,講的都差不多,都不是非常深入。所以,還是得去看官方文檔 webpack

參數(shù)真的是非常多,一個(gè)個(gè)把認(rèn)為會(huì)用到的敲過去,調(diào)了調(diào),試了試。

接下來,本文,根據(jù)自己的學(xué)習(xí)歷程,講下我用到的重要部分,首先貼一下,項(xiàng)目結(jié)構(gòu),和配置文檔。

-app  
+node_modules   
-prd    
+html   
+css    
+js   
+images   
-src    
+css
+js   
+images   
-gulpfile.js    
-webpack.config.js    
-README.md    


var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
    context: __dirname + "/src",
    entry: {
      test:["./js/test.js","./js/test1.js"]
      test2:"./js/test2.js",
    },
    output: {
        path: __dirname + "/prd",
        publicPath: "../",
        filename: "js/[name].js"
    },
    module: {
        loaders: [
            { test: /.css$/,
              loader: ExtractTextPlugin.extract("style-loader", "css-loader")},
            { test: /.json$/, loader: "json"},
            {test:  /.html$/, loader: "html"},
            { test: /.(gif|jpg|png|woff|svg|eot|ttf)??.*$/,
    loader: "url-loader?limit=50000&name=[path][name].[ext]"}
        ]
    },
    plugins: [
       new ExtractTextPlugin("css/[name].css"),
   ]
  }
參數(shù)說明

因?yàn)閣ebpack是基于node.js所有,采用的是common.js的寫法,common.js具體語法我在這里就不解釋了。

首先,webpack是需要定義輸入與輸出文件的,entry為輸入,output為輸出。

context

這個(gè)是輸入entry的上下文環(huán)境,__dirname代指整個(gè)項(xiàng)目路徑,即directory name。
我的項(xiàng)目結(jié)構(gòu)中,開發(fā)目錄是src,所有在__dirname后面,加上路徑的 /src。

entry

列出輸入的文件

  entry: {
    test:["./js/test.js","./js/test1.js"],
    test2:"./js/test2.js",
    },

entry有三種定義方式,第一個(gè)直接一個(gè)字符串路徑名,代表唯一一個(gè)輸入;第二個(gè)一個(gè)數(shù)組代表多個(gè)文件對(duì)應(yīng)
一個(gè)輸出,第三種,如上寫,以字面對(duì)象量的方式,test,test2總共對(duì)應(yīng)著3個(gè)輸入2個(gè)輸出。

output
output: {
    path: __dirname + "/prd",
    publicPath: "../",
    filename: "js/[name].js"
},

path和entry的一樣。代表所有文件輸出時(shí)的前綴路徑。

這里要加重了
publicPath: "../",
這個(gè)屬性一直沒重視,認(rèn)為這個(gè)和path應(yīng)該是一樣一樣的,為何還要多設(shè)置一個(gè),所有一開始,我是只設(shè)置了path,并沒有設(shè)置publicPath的。那么這里為什么設(shè)置了publicPath: "../",呢。

我們通過一個(gè)例子來說明原因。

div {
    background-image: url(../images/test/icon.jpg);
}  //我在src目錄下的css文件夾中的index.css中設(shè)置背景圖片

require(../images/icon.png) //我在src目錄下的js文件的index.js中引入圖片
var img = require("../images/test/icon.jpg");
document.getElementById("image").setAttribute("src", img);

  //prd下的html文件夾中的indexhtml代碼

  
    
    test
    
  
  
    
test

如上所述,我用css與js兩種方式引入圖片。
只是在src中的話,那樣是沒有問題的,但要是在prd中,因?yàn)閜rd為打包后文件。對(duì)于這些地址的處理,是沒有太多介紹的,所有只能一個(gè)個(gè)試。如果我不加publicPath: "../",的話,那么這些圖片對(duì)應(yīng)的路徑

__dirname/prd/css/images/test/icon.png  /第一種
__dirname/prd/html/images/test/icon.png//第二種
__dirname/prd/images/test/icon.png //正確路徑

所以問題出在了webpack打包的時(shí)候,處理地址的時(shí)候會(huì)將前面"../"給消除了,所有你再到chrome里看他是他的地址是 images/test/icon.jpg,沒有前面哪個(gè)../,當(dāng)然了,我的研究也暫時(shí)只到這里,你能夠通過public設(shè)置../來達(dá)到目的。而我之所以把html放入prd中,而不是直接在項(xiàng)目目錄下,也是因?yàn)檫@個(gè)~放在項(xiàng)目目錄下,這個(gè)publicPath路徑就沒法統(tǒng)一了,所有只能先折中一下,將html也放入prd中。
這樣上述的圖片就應(yīng)該正常顯示了。
但是這樣的話,也就達(dá)不到我想做的前后端完全分離的效果了,所有,這里先留下一筆,折騰了一天,還沒找到解決方案。

filename: "js/[name].js"

這個(gè)是設(shè)置輸出路徑在緊接著前面path與publicPath兩個(gè)深一層的 設(shè)置,這個(gè)對(duì)應(yīng)著entry的輸入文件,name就是entry對(duì)象里的鍵值名,即test,test2。

loader

大體上module里面,我暫時(shí)用到的只有l(wèi)oaders,所有這里只講解loaders。

module: {
    loaders: [
        { test: /.css$/,
          loader: ExtractTextPlugin.extract("style-loader", "css-loader")},
        { test: /.json$/, loader: "json"},
        {test:  /.html$/, loader: "html"},
        { test: /.(gif|jpg|png|woff|svg|eot|ttf)??.*$/,
loader: "url-loader?limit=50000&name=[path][name].[ext]"}
    ]
},

loaders是一個(gè)數(shù)組,數(shù)組里是對(duì)每種文件的打包處理。因?yàn)閣ebpack本身只支持js打包的處理,所有我們要是想把css,json,html,圖片一起打包了,就得另外下各種各樣的加載器了。
簡(jiǎn)單說下用法,在我們的entry的入口js文件中,require(../images/icon.png)既可以引入一個(gè)png格式的文件,此時(shí),webpack打包時(shí),會(huì)檢測(cè)require的文件,并采用對(duì)應(yīng)的規(guī)則去解析,如果你沒有對(duì)應(yīng)的加載器就會(huì)報(bào)錯(cuò),這里我們引入了url-loader,所以他會(huì)正確解析打包。

(url-loader用法,url-loader?這里的?表示query查詢的意思,后面跟的是規(guī)則,當(dāng)文件大小小于50kb的時(shí)候,采用base64格式,如果大于50kb則采用鏈接)

不得不說,大部分加載器的說明文檔還是太簡(jiǎn)單了,寥寥幾句,暫時(shí)還不知道如何高度的定制化需求。list of loaders

test
test中對(duì)應(yīng)的是一個(gè)正則表達(dá)式,沒有什么好說的,不知道的可以找相關(guān)的文檔看看,也可以點(diǎn)我這篇博客看看正則表達(dá)小結(jié)與小知識(shí)點(diǎn)集錦

loader
loader對(duì)應(yīng)的就是,匹配該規(guī)則時(shí)指定的加載器,比如匹配到j(luò)son文件時(shí),采用“json”加載器,全稱是"json-loader",當(dāng)然簡(jiǎn)稱也沒有問題。至于css中那個(gè)是一個(gè)額外的插件,表示匹配到css時(shí)采用這個(gè)插件,至于插件的聲明與用法,請(qǐng)看下面的參數(shù)。

plugins
plugins: [
   new ExtractTextPlugin("css/[name].css"),
]

plugins 是插件的聲明與用法,首先用new實(shí)例化一個(gè)插件,參數(shù)是一個(gè)地址規(guī)則的字符串,
表示把require的css文件輸出的地址。
插件也有許多,想要高度定制需求,肯定是要結(jié)合插件與加載器的。list of plugin

使用相關(guān)

使用的時(shí)候,直接到項(xiàng)目目錄下,使用webpack就會(huì)自動(dòng)執(zhí)行。
當(dāng)然,輸入webpack -w 每次更改后會(huì)自動(dòng)執(zhí)行。
另外webpack提供node.js的服務(wù)器供調(diào)試。
滿復(fù)雜的文檔,看花了。webpack-dev-server

安裝

npm install webpack-dev-server --save-dev

執(zhí)行

webpack-dev-server
好了,使用的時(shí)候,還有許多其他的小細(xì)節(jié),可以去探索 。
當(dāng)然大部分時(shí)候有這些也足夠了。感興趣的可以繼續(xù)去探索

結(jié)語

其實(shí),如果不喜歡折騰也可以來嘗試一下fekit,學(xué)習(xí)成本較低,并且非常強(qiáng)大。
前端構(gòu)建工具fekit
文中有什么紕漏,歡迎大家指出~

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

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

相關(guān)文章

  • FEDay 參會(huì)小記

    摘要:介紹微信風(fēng)格的,與客戶端體驗(yàn)一致,這個(gè)自己去微信上看吧,略。微信調(diào)試一件套,網(wǎng)頁授權(quán)模擬集成代理遠(yuǎn)程調(diào)試。這些在微信開發(fā)者中心有介紹,略。年微信開發(fā)經(jīng)驗(yàn)的人,終于又成為了零年開發(fā)經(jīng)驗(yàn)的人,重新走上了踩坑之路。 showImg(https://segmentfault.com/img/bVtEd1);活動(dòng)地址:http://fequan.com/2016/ 注意:英文不好,小記也帶有自己...

    xcc3641 評(píng)論0 收藏0
  • 小程序如何防止資源被盜刷?

    摘要:然而小程序放上去不到兩周,就在昨天就在昨天就在昨天,突然收到騰訊云的郵件提示,欠費(fèi),,什么情況啊,我懵逼了,想了半天,先充了幾塊錢進(jìn)去,畢竟不想自己努力構(gòu)思的產(chǎn)品,就誕生這么幾天就夭折了。 showImg(https://segmentfault.com/img/bVbkcfC?w=1080&h=298); 做過前端,或?qū)π〕绦蛴行┝私獾耐瑢W(xué)都知道,小程序是沒有域名訪問概念的,訪問的路...

    jerryloveemily 評(píng)論0 收藏0
  • 小程序如何防止資源被盜刷?

    摘要:然而小程序放上去不到兩周,就在昨天就在昨天就在昨天,突然收到騰訊云的郵件提示,欠費(fèi),,什么情況啊,我懵逼了,想了半天,先充了幾塊錢進(jìn)去,畢竟不想自己努力構(gòu)思的產(chǎn)品,就誕生這么幾天就夭折了。 showImg(https://segmentfault.com/img/bVbkcfC?w=1080&h=298); 做過前端,或?qū)π〕绦蛴行┝私獾耐瑢W(xué)都知道,小程序是沒有域名訪問概念的,訪問的路...

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

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

    rickchen 評(píng)論0 收藏0
  • 服務(wù)器遷移小記

    摘要:網(wǎng)站的遷移遷移主要用到了命令,當(dāng)然網(wǎng)站小文件比較多的情況下例如,那么最好先打包在遠(yuǎn)程拷貝,速度會(huì)快很多。但是在服務(wù)器上安裝的時(shí)候死活提示缺少依賴。 從 vultr 遷移到 digitalocean 幾個(gè)月前收到 digitalocean 發(fā)來的郵件,說因?yàn)槲已?qǐng)用戶注冊(cè)并達(dá)到他的要求,送了我50刀的額度,本來就沒想到它能送,結(jié)果不久之前它又送了一次,果斷讓我產(chǎn)生了回到它的懷抱的念頭,...

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

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

0條評(píng)論

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