亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解如何使用webpack打包Vue工程

2019-11-19 16:28:18
字體:
來源:轉載
供稿:網友

使用webpack打包Vue工程

前言

入行一年,從什么都不懂的小白,到現在什么都懂一點的小白,也算是飛躍了。感嘆一下現在的前端,從nodejs出來到現在各種各樣的工具如雨后春筍般的出現。大神們瘋狂的造輪子,玩的不亦樂乎。我等小白們,瘋狂追趕,學的心肝脾肺都快衰竭。而我的精力也僅限淺嘗輒止,但是學多一點總有好處的。本篇文章就是介紹如何使用webpack構建前端工程。

目標

本次的工程以Vue.js為主角,Vue.js是一款小巧優雅而且強大的輕量級mvvm框架,配合webpack模塊化打包。制作出如下圖的效果。僅僅搭一個框架,會用上很多插件和加載器。

環境準備

主要是一些全局的nodejs包

  1. Nodejs
  2. npm
  3. webpack
  4. less
sudo npm install webpack -g // -g 代表全局安裝webpack,調出命令行即可使用webpack命令sudo npm install less -g   // -g 全局安裝 less to css 轉換器

開始

1. 初始化工程

創建工程文件夾 new 并定位到 new

mkdir new && cd new

使用npm初始化工程

npm init

根據需要設置項目的信息, 也可以一路回車,使用默認信息,默認項目名稱為文件夾名(項目名稱不要設置成某個模塊名,否則將來你引用摸個模塊的時候會報錯)

name: (new) version: (1.0.0) description: entry point: (index.js) test command: git repository: keywords: newauthor: fzlicense: (ISC) { "name": "gt", "version": "1.0.0", "description": "", "main": "index.js", "scripts": {  "test": "echo /"Error: no test specified/" && exit 1" }, "keywords": [  "new" ], "author": "fz", "license": "ISC"}Is this ok? (yes) 

之后文件夾下會生成一個package.json,記錄了項目的詳細信息,包括了各種依賴和插件。

2. 創建目錄以及webpack配置文件

├── dist      // 編譯之后輸出文件的目錄├── src       // 應用邏輯代碼存放區域│  ├── lib    // 存放npm上找不到的第三方庫│  │  ├── backbone.js│  │  └── underscore.js│  ├── static   // 存放靜態資源│  │  └── logo.png│  ├── app.html  // 部件模板│  ├── app.js   // 部件代碼│  └── app.less  // 部件樣式├── index.html   // 應用首頁模板├── index.js    // 應用入口├── package.json  // 工程配置文件└── webpack.config.js // webpack配置文件

現在的目錄結構,文件都是空白的,等一下把他們補上。

3. 安裝webpack各中模塊的loader(加載器)和插件以及我們需要的模塊

npm install --save less     // 本地按裝lessnpm install --save less-loader  // less模塊的加載器,配合下面css-loader 和 style-loadernpm install --save css-loader  // css 模塊加載器npm install --save style-loader // 以上兩個插件的根基npm install --save url-loader  // 用來處理 圖片 字體 的模塊,是由下面file-loader封裝的??勺远x文件名npm install --save file-loader npm install --save html-loader  // 加載html文件用的npm install --save text-loader  // 加載純文本用的npm install --save html-webpack-plugin      // 生成html文件插件npm install --save extract-text-webpack-plugin  // 單獨提取css文件插件npm install --save webpack            // 提供webpack對象npm install --save webpack-dev-server      // webpack-server開發包,方便調試npm install --save vuenpm install --save jquery    

4. 完成后的package.json

{ "name": "new", "version": "1.0.0", "description": "", "main": "index.js", "scripts": {  "dev": "webpack-dev-server --hot --inline",  // 用戶啟動 webpack-dev-server 用于用戶調試 --hot 代表熱替換 , --inline 模式。。不太清楚。  "test": "echo /"Error: no test specified/" && exit 1" }, "keywords": [  "new" ], "author": "fz", "license": "ISC", "dependencies": {  "bootstrap": "^3.3.6",  "css-loader": "^0.23.1",  "extract-text-webpack-plugin": "^1.0.1",  "file-loader": "^0.9.0",  "html-loader": "^0.4.3",  "html-webpack-plugin": "^2.22.0",  "jquery": "^2.1.4",  "less": "^2.7.1",  "less-loader": "^2.2.3",  "style-loader": "^0.13.1",  "text-loader": "0.0.1",  "url-loader": "^0.5.7",  "vue": "^1.0.26",  "webpack": "^1.13.1",  "webpack-dev-server": "^1.14.1" }}

3. 編寫webpack.config.js配置文件

webpack配置文件比較復雜,需要做一下說明:webpack作為一款模塊打包器,其管理的單元就是模塊,webpack的模塊指的不僅僅是js,包括了樣式,圖片,字體,模板等等。不同的模塊需要相應的loader作為加載器進行加載。

var webpack = require('webpack');var path = require('path');var htmlWebpackPlugin = require('html-webpack-plugin');var extractTextWebpackPlugin = require('extract-text-webpack-plugin');

引入必要的插件和模塊

module.exports = {  entry: {    "index": "./index.js",    "common": ['vue', 'jquery', 'underscore', 'backbone']  },

entry 顧名思義就是入口,他是程序的入口,但它同時也是chunk(代碼塊)構造器。構造有兩種方式,上面一種,通過文件內require的模塊關系,將文件打包成chunk。下面一種意思就是組成這個chunk的是這幾個模塊(backbone,underscore等三方模塊的定義在下面, vue,jQuery,可以直接通過npm安裝)。

這個配置會編譯出兩個文件,一個當作公共庫使用,一個當作網站入口使用。

  output: {    path: './dist',        publicPath: '/path/',       filename: '[name].[hash].js'    },

很明顯,這里是輸出文件控制

  1. path: 輸出編譯后文件路徑
  2. publicPath: 在html-webpack-plugin中,中引入腳本的根目錄。(生成)
  3. filename: 輸出文件名,[name]的意思就是原來chunk代碼塊叫什么名字就是什么名字,[hash],文件的哈希值。

例如: 入口文件名叫index,那么它的輸出就是index.d87f87sd6fsdgs76gsd967.js

  module: {    loaders: [      {        test: //.less$/,        loader: 'style-loader!css-loader!less-loader'      },      {        test: //.less$/,        loader: extractTextWebpackPlugin.extract("style-loader", "css-loader!less-loader")        // 配合‘extract-text-webpack-plugin'可以剝離,css      },      {        test: //.css$/,        loader: 'style-loader!css-loader'      },      {        test: //.(png|jpg|gif|woff|woff2|ttf|eot|svg)$/,        loader: 'url-loader?limite=8192'  // limit 是轉換base64的文件大小的閥值8兆      },      {        test: //.html$/,        loader: 'html-loader'  // 可以用來加載模板      }    ]  },

module 這部分,我不是很了解,只知道這里可以用于loader定義。loaders是一個數組。

  1. test: 定義加載模塊的文件名正則表達式
  2. loader: 定義加載模塊的加載器

加載器可以多個配合使用,典型的就是style css less,邏輯還是很清晰的,less 轉 css 轉 樣式模塊,然后插入文檔。

  resolve: {    root: [      path.resolve(__dirname, 'src/lib')    ],    extensions: ['', '.js'],    alias: {      'underscore': 'underscore.js',      'backbone': 'backbone.js',    }  },

解析模塊功能,用來解析三方模塊和一些require不方便的模塊。

  1. root: 模塊搜索路徑數組,告訴webpack從哪里去找模塊。我這里定義了一個src/lib路徑,我把一些庫放在這個路徑下面。引用的時候,可以直接require(‘underscore.x.x.x.js');不必加路徑。
  2. extensions: 拓展名,設置擴展名后,可以require(‘underscore'),不必加.js,這里一定要設置,否則,webpack-dev-server 會報錯,真心坑爹。
  3. alias: 經過上面的設置,已經可以隨心所欲引入三方模塊了,但是我覺得使用別名的方式更好,更方便管理。在文件中引用公共庫的時候避免使用路徑的方式,例如require(‘../../lib/ssssss.js')。在別名中定義好即可。
 plugins: [    new webpack.optimize.CommonsChunkPlugin({      name: 'common',      filename: '[name].[hash].js',      chunks: ['index', 'common']  // extract commonChunk from index & common    }),    new htmlWebpackPlugin({      template: './index.html',      filename: 'index.html',      chunks: ['index', 'common']    }),    new webpack.ProvidePlugin({      jQuery: "jquery"    }),    new webpack.optimize.UglifyJsPlugin(),    new extractTextWebpackPlugin("style.css", {      allChunks: true    })  ]};

插件庫定義

  1. CommonsChunkPlugin 這個插件就是用于提取公共模塊的插件,它從chunks中的若干個chunk代碼塊中分析出他們公用的模塊,并打包成name定義的chunk代碼塊,你會發現common代碼塊和入口的common代碼塊重名,我們可以重新寫一個新的名字。也可以不寫。假如重名,生成的common.js中包好的模塊是entry入口定義的所有模塊。[‘vue', ‘jquery', ‘underscore', ‘backbone'],這樣也比較好理解,因為我們。
  2. htmlWebpackplugin 插件不是webpack自帶的插件,它的作用是根據chunk代碼塊生成文檔,下面的意思就是在index.html中引入index.js代碼和common.js代碼。
  3. webpack.ProvidePlugin 插件用于有些庫,比如bootstrap,打包不會出錯,但是放在瀏覽器下就出問題,原因是bootstrap在初始化的時候要傳入全局的jQuery變量,webpack中各模塊都是獨立的,jquery也是,jQuery無法賦值到window上,導致報錯,這時候,這個插件就派上用場了,將jquery模塊輸出到全局的jQuery變量上。bootstrap不再報錯
  4. extractTextWebpackPlugin 這個外部插件可以將css文件獨立剝離出來,保存為一個單獨的樣式文件。

插件可以更具開發環境定義,因為插件越多,編譯越慢,我們在開發環境的時候其實不需要那么多插件,生產環境的時候才需要,所以可以做一些處理,動態添加插件。這里有文章可以做,不介紹。

4. 寫邏輯代碼

// index.jsvar Vue = require('vue');var app = new Vue({  el: '#app',  components: {    app: require('./src/app.js')  }});

require('vue'),使用vue模塊,新建vue實例,(vue的具體用法上官網),內建一個app字組件,用同步的方法獲取在./src/目錄下的app.js模塊。

// index.html 入口模板<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>vueapp</title></head><body id="app">  <app></app></body></html>

html-webpack-plugin會自動生成插入的script,制成入口。

// app.jsvar template = require('./app.html');require('./app.less');module.exports = {  template: template,  data: function (){    return {      message: 'hello word!!'    };  }};
// app.html 視圖模板<div id="div1">  <img src="./static/logo.png" alt="">  <div id="div2">    {{message}}  </div></div>
// app.less 視圖樣式#div1 {  text-align: center;}#div2 {  font-size: 30px;}

定義一個視圖,作為首頁,引入模板,引入樣式,一個SPA的架子就這么搭好了。

5. 編譯

在工程目錄下命令行輸入

webpack

生成目錄

├── dist│  ├── common.6b92c6b075a69a71d22f.js│  ├── index.6b92c6b075a69a71d22f.js│  ├── index.html│  └── style.6b92c6b075a69a71d22f.css

編譯完成,可以看到以上的目錄,common為公共提取的模塊,style是公共提取的css文件,index.js,邏輯入口。項目打包完成。

6. 調試開發

webpack 提供了 weppack-dev-server 插件,很方便我們進行調試,我們在package.json的script中定義一個命令:

'dev': 'webpack-dev-server --hot --inline'

我們就可以在命令行中輸入 npm run dev,在瀏覽器輸入localhost:8080就可以看到網頁了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性生活大片免费观看网址| 一本色道久久综合狠狠躁篇怎么玩| 精品久久久久久久久久久久久| 国产成人福利视频| 国产精品爽爽爽爽爽爽在线观看| 日韩精品在线免费观看| 国产精品中文久久久久久久| 欧洲成人在线观看| 亚洲精品一区二区网址| 色妞欧美日韩在线| 岛国av一区二区| 91九色国产视频| 亚洲精品黄网在线观看| 亚洲最大中文字幕| 国内精品久久久久久影视8| 亚洲xxx自由成熟| 久久中文久久字幕| 日韩中文字幕精品| 国产精品狼人色视频一区| 亚洲欧洲一区二区三区在线观看| 国产精品免费视频xxxx| 欧美激情免费在线| 97免费视频在线播放| 日本精品免费一区二区三区| 国产一区二区三区在线视频| 国产精品中文字幕在线观看| 亚洲黄页视频免费观看| 中文字幕亚洲欧美一区二区三区| 国产a∨精品一区二区三区不卡| 91禁外国网站| 国产成人久久久| 午夜精品福利视频| 久久久久国色av免费观看性色| 欧美性猛交xxxx乱大交3| 国产欧美一区二区三区视频| 色与欲影视天天看综合网| 爱福利视频一区| 久久久精品视频成人| 欧洲精品在线视频| 欧美精品少妇videofree| 91精品啪在线观看麻豆免费| 久久久成人精品视频| 欧美日韩在线视频观看| 欧美成人激情图片网| 国产欧美 在线欧美| 精品亚洲一区二区三区四区五区| 欧美综合国产精品久久丁香| 黑人巨大精品欧美一区免费视频| 91精品国产亚洲| zzjj国产精品一区二区| 69国产精品成人在线播放| 国产成人鲁鲁免费视频a| 成人免费视频网| 国产欧美日韩免费| 亚洲精品456在线播放狼人| 欧美专区在线观看| 久久成人亚洲精品| 91青草视频久久| 久久久久久久网站| 91欧美精品午夜性色福利在线| 在线观看久久久久久| 伊人久久久久久久久久久久久| 成人久久一区二区| 国产精品美女免费视频| 国产日产久久高清欧美一区| 国产精品高潮粉嫩av| xvideos亚洲人网站| 91精品久久久久久久久中文字幕| 高清在线视频日韩欧美| 欧美激情日韩图片| 国产亚洲精品综合一区91| 亚洲欧美综合图区| 日韩成人中文电影| 91久久国产婷婷一区二区| 97国产精品视频人人做人人爱| 中文在线不卡视频| 精品成人乱色一区二区| 欧美一级免费视频| 国产男女猛烈无遮挡91| 欧美日韩另类在线| 亚洲一区二区久久| 亚洲女性裸体视频| 亚洲精品国产suv| 亚洲美女精品成人在线视频| 国产亚洲欧美一区| 亚洲人成网站777色婷婷| 免费99精品国产自在在线| 狠狠躁夜夜躁久久躁别揉| 国产精品自产拍在线观看| 亚洲自拍偷拍福利| 久久噜噜噜精品国产亚洲综合| 欧美在线视频网| 26uuu另类亚洲欧美日本一| 国模视频一区二区三区| 亚洲欧美日韩视频一区| 国产精品美女免费视频| 成人在线观看视频网站| 欧美性猛交xxxx乱大交3| 欧美精品一区三区| 亚洲激情视频在线观看| 国产91久久婷婷一区二区| 日本不卡视频在线播放| 欧美日韩国产一区在线| 亚洲国产精品字幕| 亚洲免费精彩视频| 亚洲精品久久久久久久久| 日韩大陆欧美高清视频区| 日本亚洲欧美三级| 欧美在线亚洲在线| 久久成人国产精品| 精品高清美女精品国产区| 午夜精品久久久久久久99热| 亚洲午夜色婷婷在线| 97在线精品国自产拍中文| 中文字幕在线精品| 欧美极品在线视频| 黑人巨大精品欧美一区二区| 欧美疯狂做受xxxx高潮| 91精品美女在线| 一本一道久久a久久精品逆3p| 精品呦交小u女在线| 在线国产精品播放| 久久免费成人精品视频| 亚洲激情电影中文字幕| 国产有码在线一区二区视频| 亚洲韩国日本中文字幕| 亚洲伊人一本大道中文字幕| 亚洲综合国产精品| 亚洲成年网站在线观看| 欧美一级视频免费在线观看| 国产情人节一区| 美女性感视频久久久| 国产精品一久久香蕉国产线看观看| 亚洲一区二区三区在线免费观看| 国产综合视频在线观看| 欧美麻豆久久久久久中文| 日韩av电影在线播放| 在线成人一区二区| 亚洲欧美中文日韩v在线观看| 国产精品久久久av| 亚洲精选在线观看| 亚洲精品国产品国语在线| 国产欧美在线播放| 欧美日韩亚洲一区二区三区| 国模极品一区二区三区| www.美女亚洲精品| 久久久之久亚州精品露出| 丁香五六月婷婷久久激情| 欧美极品欧美精品欧美视频| 在线观看中文字幕亚洲| 亚洲国产精品成人一区二区| 日韩高清免费在线| 亚洲成人精品久久| 国产综合在线观看视频| 亚洲午夜性刺激影院| 欧洲成人午夜免费大片| 久久久www成人免费精品| 高清欧美性猛交xxxx| 国产精品极品美女在线观看免费| 久久久在线免费观看| 亚洲国产欧美一区二区三区同亚洲| 日韩欧美在线第一页| 日韩女优人人人人射在线视频| 国产亚洲精品久久久优势|