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

參考資料webpack指南

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

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

打開控制臺(tái)輸入生成文件夾并打開,初始化一下項(xiàng)目

mkdir demo1 && cd demo1.

npm init

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

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

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

不推薦全局安裝 webpack。這會(huì)將你項(xiàng)目中的 webpack 鎖定到指定版本,并且在使用不同的 webpack 版本的項(xiàng)目中,可能會(huì)導(dǎo)致構(gòu)建失敗。(來自webpack指南的建議)

接下來裝一下會(huì)用到的loader

html:?

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

css:?

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

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

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

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

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

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

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

js:

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

????????babel-loader

????????babel-preset-env (使你可以暢快使用ES 6 7 ...N的牛逼哄哄的JavaScript 的編譯器 支持,會(huì)幫你自動(dòng)將新版本的JavaScript編譯成瀏覽器認(rèn)識(shí)的樣子)

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

????????babel-helper-vue-jsx-merge-props (這兩個(gè)是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 (提供一個(gè)設(shè)置環(huán)境變量的scripts,簡單點(diǎn)說就是你可以通過傳遞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中加入這個(gè)命令,加入之后你就不用老是敲又臭又長的命令行了,直接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"

寫一個(gè)webpack.config.js配置文件

首先我們把要用到的一些東西引入進(jìn)來

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ù)

先定義一個(gè)對(duì)象config

config = {

????????entry: {

????????????//entry 是入口起點(diǎn),我們的資源文件通過此js進(jìn)行引入

????????????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 這里還需要一個(gè).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 來搭建一個(gè)簡單的web服務(wù)器。

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

// webpack-dev-server配置

config.devServer = {

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

};

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

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

config.plugins.push(

????new webpack.HotModuleReplacementPlugin(),

????//模塊熱替換

????new webpack.NoEmitOnErrorsPlugin()

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

);

config.module.rules.push(

{

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

????????use:[

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

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

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

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

????????????????loader:'postcss-loader',?????//代碼自動(dòng)補(bǔ)全,瀏覽器前綴添加

????????????????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)用這個(gè)方法來把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同級(jí)即可

{

? "presets": ["env"],

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

}

dist是打包之后的文件夾

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,647評(píng)論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,366評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,887評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,737評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,939評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,174評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評(píng)論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,608評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,914評(píng)論 2 372

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

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