国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

webpack替代fekit的折騰小記

curried / 1189人閱讀

摘要:添加依賴到如何使用依賴當你再興建一個文件的時候,就不需要一個個插件安裝了,將文件復制到當前文件下,并輸入,即通過里的依賴關系,自動把依賴安裝好了。第四步新建配置文件默認的配置文件在項目目錄下為。

WilsonLiu"s blog 首發地址

前言

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

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

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

第一步,全局安裝

npm install webpack -g

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

npm init

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

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

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

如何使用依賴?

當你再興建一個文件的時候,就不需要一個個插件安裝了,將package.json文件復制到當前文件下,并輸入npm install,即通過package.json里的依賴關系,自動把依賴安裝好了。當然,其他文件結構還是要自己新建。
這里提供一下我的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"
    }
  }
第四步 新建配置文件

默認的配置文件在項目目錄下為 webpack.config.js。 簡單的操作可以參看下面這個文檔。 《Webpack 中文指南》

恭喜入坑

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

參數真的是非常多,一個個把認為會用到的敲過去,調了調,試了試。

接下來,本文,根據自己的學習歷程,講下我用到的重要部分,首先貼一下,項目結構,和配置文檔。

-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"),
   ]
  }
參數說明

因為webpack是基于node.js所有,采用的是common.js的寫法,common.js具體語法我在這里就不解釋了。

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

context

這個是輸入entry的上下文環境,__dirname代指整個項目路徑,即directory name。
我的項目結構中,開發目錄是src,所有在__dirname后面,加上路徑的 /src。

entry

列出輸入的文件

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

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

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

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

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

我們通過一個例子來說明原因。

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

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中,因為prd為打包后文件。對于這些地址的處理,是沒有太多介紹的,所有只能一個個試。如果我不加publicPath: "../",的話,那么這些圖片對應的路徑

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

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

filename: "js/[name].js"

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

loader

大體上module里面,我暫時用到的只有loaders,所有這里只講解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是一個數組,數組里是對每種文件的打包處理。因為webpack本身只支持js打包的處理,所有我們要是想把css,json,html,圖片一起打包了,就得另外下各種各樣的加載器了。
簡單說下用法,在我們的entry的入口js文件中,require(../images/icon.png)既可以引入一個png格式的文件,此時,webpack打包時,會檢測require的文件,并采用對應的規則去解析,如果你沒有對應的加載器就會報錯,這里我們引入了url-loader,所以他會正確解析打包。

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

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

test
test中對應的是一個正則表達式,沒有什么好說的,不知道的可以找相關的文檔看看,也可以點我這篇博客看看正則表達小結與小知識點集錦

loader
loader對應的就是,匹配該規則時指定的加載器,比如匹配到json文件時,采用“json”加載器,全稱是"json-loader",當然簡稱也沒有問題。至于css中那個是一個額外的插件,表示匹配到css時采用這個插件,至于插件的聲明與用法,請看下面的參數。

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

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

使用相關

使用的時候,直接到項目目錄下,使用webpack就會自動執行。
當然,輸入webpack -w 每次更改后會自動執行。
另外webpack提供node.js的服務器供調試。
滿復雜的文檔,看花了。webpack-dev-server

安裝

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

執行

webpack-dev-server
好了,使用的時候,還有許多其他的小細節,可以去探索 。
當然大部分時候有這些也足夠了。感興趣的可以繼續去探索

結語

其實,如果不喜歡折騰也可以來嘗試一下fekit,學習成本較低,并且非常強大。
前端構建工具fekit
文中有什么紕漏,歡迎大家指出~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78544.html

相關文章

  • FEDay 參會小記

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

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

    摘要:然而小程序放上去不到兩周,就在昨天就在昨天就在昨天,突然收到騰訊云的郵件提示,欠費,,什么情況啊,我懵逼了,想了半天,先充了幾塊錢進去,畢竟不想自己努力構思的產品,就誕生這么幾天就夭折了。 showImg(https://segmentfault.com/img/bVbkcfC?w=1080&h=298); 做過前端,或對小程序有些了解的同學都知道,小程序是沒有域名訪問概念的,訪問的路...

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

    摘要:然而小程序放上去不到兩周,就在昨天就在昨天就在昨天,突然收到騰訊云的郵件提示,欠費,,什么情況啊,我懵逼了,想了半天,先充了幾塊錢進去,畢竟不想自己努力構思的產品,就誕生這么幾天就夭折了。 showImg(https://segmentfault.com/img/bVbkcfC?w=1080&h=298); 做過前端,或對小程序有些了解的同學都知道,小程序是沒有域名訪問概念的,訪問的路...

    greatwhole 評論0 收藏0
  • Vue ES6 Jade Scss Webpack Gulp

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

    rickchen 評論0 收藏0
  • 服務器遷移小記

    摘要:網站的遷移遷移主要用到了命令,當然網站小文件比較多的情況下例如,那么最好先打包在遠程拷貝,速度會快很多。但是在服務器上安裝的時候死活提示缺少依賴。 從 vultr 遷移到 digitalocean 幾個月前收到 digitalocean 發來的郵件,說因為我邀請用戶注冊并達到他的要求,送了我50刀的額度,本來就沒想到它能送,結果不久之前它又送了一次,果斷讓我產生了回到它的懷抱的念頭,...

    Karrdy 評論0 收藏0

發表評論

0條評論

curried

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<