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

資訊專欄INFORMATION COLUMN

聊聊webpack

Ashin / 448人閱讀

摘要:但是由于缺乏規范化管理,出現了很多種模塊化規范,從針對的規范,到針對瀏覽器端的,終于在里規范了前端模塊化。可以通過兩種方式之一終端或。導出多個配置對象運行時,所有的配置對象都會構建。在階段又會發生很多小事件。

隨著前端的迅速發展,web項目復雜度也是越來越高。為了便捷開發和利于優化,將一個復雜項目拆分成一個個小的模塊,于是模塊化開發出現了。但是由于缺乏規范化管理,出現了很多種模塊化規范,從針對nodejs的commonjs規范,到針對瀏覽器端的CMD、AMD,終于在ES6里規范了前端模塊化。

前端構建工具

雖然前端開發在模塊化進程上搞得風生水起,但是有個問題就是:源代碼無法直接運行,必須通過構建工具轉換后才可以正常運行。基于nodejs常見的構建工具有gulp、fis3、webpack。

gulp

Gulp是一個基于流的自動化構建工具。 Gulp 被設計得非常簡單,只通過下面5種方法就可以支持幾乎所有構建場景:

1.通過 gulp.task注冊一個任務;
2.通過 gulp.run 執行任務;
3.通過 gulp.watch 監聽文件的變化;
4.通過 gulp.src 讀取文件:
5.通過 gulp.dest 寫文件。

Gulp的優點是好用又不失靈活,既可以多帶帶完成構建,也可以和其他工具搭配使用 。其缺點是集成度不高,要寫很多配置后才可以用,無法做到開箱即用 。

fis3

Fis3 是一個來自百度的國產構建工具。相對于Gulp只提供了基本功能的工具,Fis3集成了Web開發中的常用構建功能,如下所述。

1.讀寫文件: 通過 fis.match 讀文件,release 配置文件的輸出路徑。
2.資源定位: 解析文件之間的依賴關系和文件位置。
3.文件指紋: 在通過 useHash 配置輸出文件時為文件 URL 加上 md5 戳,來優化瀏覽器的緩存。
4.文件編譯: 通過 parser 配置文件解析器做文件轉換,例如將 ES6 編譯成 ES5。
5.壓縮資源: 通過 optimizer 配置代碼壓縮方法。
6.圖片合并: 通過 spriter 配置合并 css 里導入的圖片到一個文件中,來減少 Hπp 請求數。

Fis3的優點是集成了各種 Web 開發所需的構建功能,配置簡單、開箱即用 。
Fis3 是一種專注于 Web 開發的完整解決方案,如果將 Gulp 比作汽車的發動機, 則可以將 Fis3 比作 一輛完整的汽車。

webpack

Webpack 是一個打包模塊化 JavaScript 的工具,在 Webpack 里一 切文件皆模塊,通過 Loader轉換文件,通過 Plugin注入鉤子,最后輸出由多個模塊組合成的文件。 Webpack專注于構建模塊化項目。

Webpack的優點是 :

1.專注于處理模塊化的項目,能做到開箱即用、 一步到位:
2.可通過 Plugin 擴展,完整好用又不失靈活 ;
3.使用場景不局限于 Web 開發:
4.社區龐大活躍 ,經常引入緊跟時代發展的新特性,能為大多數場景找到已有的開源擴展:
5.良好的開發體驗 。

Webpack的缺點是只能用于采用模塊化開發的項目 。

webpack 常見api簡介

webpack的工作就是把我們的靜態資源模塊通過遞歸形成依賴關系圖,然后將這些模塊打包成一個或多個 bundle文件。
它的核心api是entry、module(loader)、plugin、output、mode。接下來我們看一下這些api的功能及用法。

entry 入口

入口起點:構建依賴的開始,通過該起點文件尋找處理依賴

module.exports = {
  entry: "./path/to/my/entry/file.js"http://字符串形式
  entry: ["./path/to/my/entry/file.js","./path/to/my/entry/file1.js"]//數組形式
  entry: {
             name:"./path/to/my/entry/file.js",
             name1:"./path/to/my/entry/file1.js"
         }//對象形式
};
output 出口

output 屬性告訴 webpack 在哪里輸出它所創建的 bundles,以及如何命名這些文件

const path = require("path");

module.exports = {
  entry: "./path/to/my/entry/file.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "my-first-webpack.bundle.js",
    filename: "[name].js",//多出口
    publicPath: "http://cdn.example.com/assets/[hash]/",//cdn + hash
  }
};
loader 文件處理

loader 讓 webpack 能夠去處理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以將所有類型的文件轉換為 webpack 能夠處理的有效模塊,然后你就可以利用 webpack 的打包能力,對它們進行處理。

module.exports = {
    module: {
        rules: [
          { test: /.txt$/, use: "raw-loader" }
        ]
      }
}      
plugins 插件

插件的使用范圍從打包優化和壓縮,一直到重新定義環境中的變量。插件接口功能極其強大,可以用來處理各種各樣的任務。通過使用 new 操作符來創建它的一個實例。

const HtmlWebpackPlugin = require("html-webpack-plugin"); // 通過 npm 安裝
module.exports = {
  module: {
    rules: [
      { test: /.txt$/, use: "raw-loader" }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({template: "./src/index.html"})
  ]
};
mode 模式

通過mode參數配置,開啟開發或者生產環境下的webpack內置優化。

module.exports = {
  mode: "production" //development
};
resolve 解析

設置模塊如何被解析。
1.resolve.alias

import Utility from "../../utilities/utility";

alias: {
  Utilities: path.resolve(__dirname, "src/utilities/"),
  Templates: path.resolve(__dirname, "src/templates/")
}

使用alias配置別名,可以按下面方式引用
import Utility from "Utilities/utility";

2.resolve.modules
webpack 解析模塊時應該搜索的目錄

modules: [path.resolve(__dirname, "src"), "node_modules"]
webpack使用指南 配置導出

webpack是需要傳入一個配置對象(configuration object)。可以通過兩種方式之一:終端或Node.js。
除了導出單個配置對象,還有可以有其他導出方式:
1.導出函數

module.exports = function(env, argv) {
  return {
    mode: env.production ? "production" : "development",
    devtool: env.production ? "source-maps" : "eval",
     plugins: [
       new webpack.optimize.UglifyJsPlugin({
        compress: argv["optimize-minimize"] // 只有傳入 -p 或 --optimize-minimize
       })
     ]
  };
};

2.導出promise
webpack 將運行由配置文件導出的函數,并且等待 Promise 返回。便于需要異步地加載所需的配置變量。

module.exports = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        entry: "./app.js",
        /* ... */
      })
    }, 5000)
  })
}

3.導出多個配置對象
運行 webpack 時,所有的配置對象都會構建。例如,導出多個配置對象,對于針對多個構建目標(例如 AMD 和 CommonJS)打包一個 library 非常有用。

module.exports = [{
  output: {
    filename: "./dist-amd.js",
    libraryTarget: "amd"
  },
  entry: "./app.js",
  mode: "production",
}, {
  output: {
    filename: "./dist-commonjs.js",
    libraryTarget: "commonjs"
  },
  entry: "./app.js",
  mode: "production",
}]
devServer 開發中

1.contentBase
告訴服務器從哪里提供內容。只有在你想要提供靜態文件時才需要。devServer.publicPath 將用于確定應該從哪里提供 bundle,并且此選項優先。

默認情況下,將使用當前工作目錄作為提供內容的目錄,但是你可以修改為其他目錄:

contentBase: path.join(__dirname, "public")//可以訪問publick文件夾下文件
contentBase: [path.join(__dirname, "public"), path.join(__dirname, "assets")]
contentBase: false

2.publicPath

此路徑下的打包文件可在瀏覽器中訪問。publicPath 總是以斜杠(/)開頭和結尾

publicPath: "/assets/"  //將打包后文件放入assets文件夾下,并可以通過瀏覽器訪問

3.host

host: "0.0.0.0" //服務器外部可訪問

4.hot

啟用 webpack 的模塊熱替換特性

5.proxy

proxy: {
  "/api": {
    target: "https://other-server.example.com",
    pathRewrite: {"^/api" : ""},//重寫url
    secure: false,//https
  }
}
//也可以通過context混合書寫
proxy: [{
  context: ["/auth", "/api"],
  target: "http://localhost:3000",
}]
webpack優化

待更新

webpack工作流程

Webpack 的構建流程可以分為以下三大階段:

1.初始化

啟動構建,讀取與合并配置參數,加載 Plugin,實例化 Compiler。

2.編譯

**:從 Entry 發出,針對每個 Module 串行調用對應的 Loader 去翻譯文件的內容, 再找到該Module 依賴的 Module,遞歸地進行編譯處理 。

在編譯階段中,最重要的事件是 compilation,因為在 compilation 階段調用了Loader, 完成了每個模塊的轉換操作。在 compilation 階段又會發生很多小事件。

3.輸出

將編譯后的 Module 組合成 Chunk,將 Chunk 轉換成文件,輸出到文件系統中 。

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

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

相關文章

  • 前端每周清單第 48 期:Slack Webpack 構建優化,CSS 命名規范與用戶追蹤,Vue.

    摘要:發布是由團隊開源的,操作接口庫,已成為事實上的瀏覽器操作標準。本周正式發布,為我們帶來了,,支持自定義頭部與腳部,支持增強,兼容原生協議等特性變化。新特性介紹日前發布了大版本更新,引入了一系列的新特性與提升,本文即是對這些變化進行深入解讀。 showImg(https://segmentfault.com/img/remote/1460000012940044); 前端每周清單專注前端...

    sean 評論0 收藏0
  • 聊聊畢業設計系列 --- 項目介紹

    摘要:又將整個文藝類閱讀系統的業務劃分為兩大部分,分別是面向管理員和合作作者的后臺管理系統和面向用戶的移動端,系統的需求分析將圍繞這兩部分進行展開。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...

    Pink 評論0 收藏0
  • 聊聊畢業設計系列 --- 項目介紹

    摘要:又將整個文藝類閱讀系統的業務劃分為兩大部分,分別是面向管理員和合作作者的后臺管理系統和面向用戶的移動端,系統的需求分析將圍繞這兩部分進行展開。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...

    villainhr 評論0 收藏0
  • 如何在公司里體現前端的價值以及提升自己的議價能力

    摘要:層現在在前端開發中用的非常的多,舉個最簡單的例子,比如前端工程的搭建,都是圍繞于。 showImg(https://segmentfault.com/img/bV5W3t?w=1334&h=796); 前言 最近在閏土大叔的前端圈里有很多小伙伴南下杭州應聘求職拿OFFER,貨比三家之后,最終入職了適合自己的公司,并且還拿到了不錯的薪水。在這些小伙伴當中,不乏剛剛大學畢業或者師出培訓班的...

    蘇丹 評論0 收藏0
  • 基于Vue2實現的仿手機QQapp(支持對話功能,滑動刪除....)—— 聊聊開發過程中踩到的一些坑

    摘要:使用進行的仿手機的的制作,在上,參考了設計師的作品,作品由個人獨立開發,源碼中進行了詳細的注釋。關于接入聊天機器人遇到的跨域問題起初,天真的以為官方應該提供了用的接口,然而沒有找到。 使用Vue2進行的仿手機QQ的webapp的制作,在ui上,參考了設計師kaokao的作品,作品由個人獨立開發,源碼中進行了詳細的注釋。 由于自己也是初學Vue2,所以注釋寫的不夠精簡,請見諒。 目前已實...

    williamwen1986 評論0 收藏0

發表評論

0條評論

Ashin

|高級講師

TA的文章

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