webpack+vue打包開發(fā)草巡,生產(chǎn)環(huán)境

參考資料webpack指南

最近在學習webpack的一些資料的整理,免得自己日后忘記型酥,現(xiàn)在寫一下開發(fā)的過程先山憨。

首先裝一個node,node官網(wǎng)安裝教程就省略了

打開控制臺輸入生成文件夾并打開弥喉,初始化一下項目

mkdir demo1 && cd demo1.

npm init

然后裝一下webpack和webpack-dev-server ,webpack是打包工具郁竟,webpack-dev-server是基于webpack一個簡單的 web 服務(wù)器,并且能夠?qū)崟r重新加載由境。

我是建議你用cnpm國內(nèi)的鏡像站棚亩,裝起來飛快,畢竟墻外的東西有可能慢的要死

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

不推薦全局安裝 webpack虏杰。這會將你項目中的 webpack 鎖定到指定版本讥蟆,并且在使用不同的 webpack 版本的項目中,可能會導致構(gòu)建失敗纺阔。(來自webpack指南的建議)

接下來裝一下會用到的loader

html:?

????????html-loader(這個是用來解析html的瘸彤,不過我一般很少用這個)

css:?

????????style-loader(webpack的樣式加載器 通過注入 style 標簽引入樣式)?

????????css-loader (通過 webpack 配置,CLI或內(nèi)聯(lián)使用 loader)

????????less-loader (添加對LESS的支持)

????????less (LESS模塊)

????????postcss-loader (不想寫瀏覽器前綴你就老實加上吧)

????????autoprefixer (自動添加萬惡之源瀏覽器前綴)

? ??????optimize-css-assets-webpack-plugin (壓縮css代碼)

js:

????????babel-core?

????????babel-loader

????????babel-preset-env (使你可以暢快使用ES 6 7 ...N的牛逼哄哄的JavaScript 的編譯器 支持笛钝,會幫你自動將新版本的JavaScript編譯成瀏覽器認識的樣子)

????????babel-plugin-transform-vue-jsx?

????????babel-helper-vue-jsx-merge-props (這兩個是vue-jsx的支持钧栖,不寫jsx可以不裝)? ??

? ??????uglifyjs-webpack-plugin (壓縮JS代碼的插件)

file:

? ? ? ? file-loader

????????url-loader (一般用來處理資源文件的loader)

vue:

????????vue (vue框架)

? ? ? ? vue-template-compiler

????????vue-loader (Vue 組件轉(zhuǎn)換為 JavaScript 模塊低零,各種特性,賊牛逼拯杠,感興趣就去看看vue-loader

分類打包

html:

????????html-webpack-plugin

css:

????????extract-text-webpack-plugin

node_env

????????cross-env (提供一個設(shè)置環(huán)境變量的scripts掏婶,簡單點說就是你可以通過傳遞NODE_ENV告訴代碼你是開發(fā)環(huán)境還是生產(chǎn)環(huán)境)

npm i --save-dev?html-loader style-loader css-loader less-loader less postcss-loader autoprefixer optimize-css-assets-webpack-plugin babel-core babel-loader babel-preset-env babel-plugin-transform-vue-jsx babel-helper-vue-jsx-merge-props uglifyjs-webpack-plugin url-loader vue vue-loader html-webpack-plugin extract-text-webpack-plugin cross-env?clean-webpack-plugin? file-loader? vue-template-compiler 幫忙??

在package.json里面的scripts中加入這個命令,加入之后你就不用老是敲又臭又長的命令行了潭陪,直接npm run dev/dist即可

"dist": "cross-env NODE_ENV=dist webpack --config webpack.config.js",

"dev": "cross-env NODE_ENV=dev webpack-dev-server --open"

寫一個webpack.config.js配置文件

首先我們把要用到的一些東西引入進來

const path = require('path');//路徑

const HtmlWebpackPlugin = require('html-webpack-plugin');

//引入html-webpack-plugin 打包index.html

const CleanWebpackPlugin = require('clean-webpack-plugin');

//清理dist文件夾

const extractTextWebpackPlugin = require('extract-text-webpack-plugin');

//打包樣式

const webpack = require('webpack');

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');//壓縮js

const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');//壓縮css

const isDev = process.env.NODE_ENV === 'dev';//環(huán)境參數(shù)

先定義一個對象config

config = {

????????entry: {

????????????//entry 是入口起點雄妥,我們的資源文件通過此js進行引入

????????????app: './src/js/index.js'

????????},

????????output: {

????????????//輸出文件

????????????filename: '[name].bundle.js',

????????????path: path.resolve(__dirname, 'dist')

????????},

????????plugins:[

????????????????????//配置插件

????????????????????new webpack.DefinePlugin({

????????????????????????'process.env':{

????????????????????????????NODE_ENV: isDev ? '"dev"' : '"dist"'//傳遞環(huán)境變量

????????????????????????}

????????????????}),

????????????????//生成index.html的插件

????????????????new HtmlWebpackPlugin({

????????????????????title:'123'

????????????????})

????????],

????????module:{

????????????//模塊參數(shù)

????????????rules:[

? ? ? ? ? ? ? ? //處理ES6.7....n和vue-jsx 這里還需要一個.baelrc的文件來輸入配置

????????????????{

? ? ? ? ? ? ? ? ????????test: /(\.jsx|\.js)$/,

? ? ? ? ? ? ? ? ?????? use: {

? ? ? ? ? ? ? ? ? ? ?????? loader: "babel-loader"

? ? ? ? ? ? ? ? ?????? },

? ? ? ? ? ? ? ? ?????? exclude: /node_modules/

? ? ? ? ? ? ?????},

? ? ? ? ? ? ? ? //處理靜態(tài)資源文件 并輸出到imgaes目錄下

???????? ?????? {

???????????? ?????? test:/\.(gif|jpg|jpeg|png|svg)$/,

???????????? ?????? use:[

???????????????? ?????? 'url-loader?limit=10000&name=images/[name].[ext]'

? ? ? ? ? ? ? ?????? ]

??????? ?????? ?}

????????????]

????}

};

由于開發(fā)和生產(chǎn)環(huán)境的不同配置也需要不一樣,根據(jù)isDev來判斷依溯,先來配置一下開發(fā)環(huán)境的代碼老厌,這里要用 webpack-dev-server 來搭建一個簡單的web服務(wù)器。

處理css的時候一般在生產(chǎn)環(huán)境才把他們打包到一個css文件中黎炉,在開發(fā)環(huán)境直接讓它插在代碼中編譯起來更加快一點

// webpack-dev-server配置

config.devServer = {

????contentBase: "./dist",//本地服務(wù)器所加載的頁面所在的目錄 ????historyApiFallback: true,//不跳轉(zhuǎn) inline: true//實時刷新

};

config.devtool='inline-source-map';

//由于開發(fā)環(huán)境的代碼都會被打包到一個js中枝秤,我們添加一個source-map.方便你開發(fā) 的時候快速定位到代碼

config.plugins.push(

????new webpack.HotModuleReplacementPlugin(),

????//模塊熱替換

????new webpack.NoEmitOnErrorsPlugin()

????// 在編譯出現(xiàn)錯誤時,使用?NoEmitOnErrorsPlugin?來跳過輸出階段慷嗜。這樣可以確保輸出資源不會包含錯誤

);

config.module.rules.push(

{

????????test:/\.less$/,

????????use:[

????????????'style-loader',

????????????'css-loader',

????????????'less-loader',

????????????{

????????????????loader:'postcss-loader',?????//代碼自動補全淀弹,瀏覽器前綴添加

????????????????options: {

????????????????????????plugins:(loader) =>[ require('autoprefixer')({browsers :[' last 5 versions']}) ]

????????????????}

????????????}

????]

},

//處理.vue文件的loader

{

????test:/\.vue$/,

????use:[

????????{ ????

????????????loader:'vue-loader'

????????}

????]

}

)

配好開發(fā)環(huán)境后,還要配一下生產(chǎn)環(huán)境的代碼

config.entry = {

? ??app: path.join(__dirname,'./src/js/index.js'),

? ??vendor:['vue']????//聲明要抽離的類庫

}

config.module.rules.push(

{

? ??test:/\.less$/,

? ??use:extractTextWebpackPlugin.extract({

????????????//通過調(diào)用這個方法來把css從js代碼中提取出來

? ? ? ? ? ??fallback:'style-loader',

? ??????????use:[

? ??????????????'css-loader',

? ??????????????'less-loader',

? ??????????????{

? ??????????????????loader:'postcss-loader',

? ? ? ? ? ? ? ? ? ??options:{

? ??????????????????????plugins:(loader) =>[require('autoprefixer')({browsers :[' last 5 versions']})]

? ?????????????????????}

? ??????????????}

? ??????????]

? ??})

},

{

????test:/\.vue$/,

????use:[

????????{

????????????loader:'vue-loader',

????????????options: {

????????????????????extractCSS: true

????????????????}

? ? ? ? ?}

????]

}

);

config.plugins.push(

? ??new CleanWebpackPlugin(['dist']),????//清理打包文件夾

? ??new extractTextWebpackPlugin('styles.[contentHash:8].css'),????//輸出 styles.css文件

? ??new webpack.optimize.ModuleConcatenationPlugin(),

? ??new webpack.optimize.CommonsChunkPlugin({

????????//分離出類庫

? ?????name:'vendor'

? ??}),

? ? new OptimizeCssAssetsPlugin({ ????

????????//css壓縮

? ??????assetNameRegExp: /.css$/g,

? ??????cssProcessor: require('cssnano'),

? ? ? ? cssProcessorOptions: {

? ? ? ? ? ? discardComments: {

? ? ? ? ? ? ? ? removeAll: true

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? canPrint: true

? ? }),

? ??new webpack.optimize.CommonsChunkPlugin({

? ?????name:'runtime'

? ??}),

? ??new webpack.BannerPlugin('版權(quán)所有庆械,翻版必究'),

? ??new UglifyJsPlugin({

????????//壓縮js代碼

? ??????test: /\.js($|\?)/i

? ??})

);

config.output.filename = 'js/[name].[chunkhash:8].js';????//定義輸出的js

這樣子配置算是寫完了最后再加一句

module.exports = config;

還有要配置一下 .babelrc文件薇溃,此文件跟webpack.config.js同級即可

{

? "presets": ["env"],

? "plugins": ["transform-vue-jsx"]

}

dist是打包之后的文件夾

src是你開發(fā)寫代碼的文件夾

文件目錄應(yīng)該是這樣子的

寫到這里也就差不多了,下次再往里面配置一下express吧缭乘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沐序,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子堕绩,更是在濱河造成了極大的恐慌策幼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奴紧,死亡現(xiàn)場離奇詭異特姐,居然都是意外死亡,警方通過查閱死者的電腦和手機绰寞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門到逊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铣口,“玉大人滤钱,你說我怎么就攤上這事∧蕴猓” “怎么了件缸?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叔遂。 經(jīng)常有香客問我他炊,道長争剿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任痊末,我火速辦了婚禮蚕苇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凿叠。我一直安慰自己涩笤,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布盒件。 她就那樣靜靜地躺著蹬碧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炒刁。 梳的紋絲不亂的頭發(fā)上恩沽,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音翔始,去河邊找鬼罗心。 笑死,一個胖子當著我的面吹牛绽昏,可吹牛的內(nèi)容都是我干的协屡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼全谤,長吁一口氣:“原來是場噩夢啊……” “哼肤晓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起认然,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤补憾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卷员,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盈匾,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年毕骡,在試婚紗的時候發(fā)現(xiàn)自己被綠了削饵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡未巫,死狀恐怖窿撬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叙凡,我是刑警寧澤劈伴,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站握爷,受9級特大地震影響跛璧,放射性物質(zhì)發(fā)生泄漏严里。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一追城、第九天 我趴在偏房一處隱蔽的房頂上張望刹碾。 院中可真熱鬧,春花似錦座柱、人聲如沸教硫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞬矩。三九已至,卻和暖如春锋玲,著一層夾襖步出監(jiān)牢的瞬間景用,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工惭蹂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伞插,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓盾碗,卻偏偏與公主長得像媚污,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子廷雅,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載芥玉。 webpack介紹和使用 一蛇摸、webpack介紹 1、由來 ...
    it筱竹閱讀 11,157評論 0 21
  • GitChat技術(shù)雜談 前言 本文較長灿巧,為了節(jié)省你的閱讀時間赶袄,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,698評論 7 110
  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,294評論 4 31
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺抠藕,特此分享以備自己日后查看饿肺,也希望更多的人看到...
    小小字符閱讀 8,178評論 7 35
  • 記得2004年的時候,互聯(lián)網(wǎng)開發(fā)就是做網(wǎng)頁幢痘,那時也沒有前端和后端的區(qū)分唬格,有時一個網(wǎng)站就是一些純靜態(tài)的html家破,通過...
    陽陽陽一堆陽閱讀 3,309評論 0 5