todo项目总结

vue+webpack项目配置:

npm init -->package json
npm i webpack vue vue-loader不区分Devdefenc和defenice依赖
warning 1:第三方依赖css-loader
warning 2:
安装vue所需依赖:
npm i css-loader vue-template-compiler
项目初始化完后。

 


新建app.vue,结构:template、style、script(暂时无法使用)
创建webpack.config.js文件(打包前端资源:图片、字体)

const HTMLPlugin=require('html-webpack-plugin')

const webpack=require('webpack')

const ExtractPlugin=require(‘extract-text-webpack-plugin’)//把非js的文件打包成靜態資源文件,可能單獨做瀏覽器緩存,或者通過js寫入到瀏覽器中,對效率有影響,希望在http頭引入單獨css

const isDev=process.env.NODE_ENV==='development'  //process.env存儲啟動腳本的對象,package.json

const config={
entry:path.join(__dirname,'src/index.js')//绝对路径,dirname文件根目錄,join拼接作用,形成絕對路徑

output:{

filename:‘bundle.[hash:8].js’,

path:path.join(__dirname,'dist')//創建dist文件夾

}

//彌補webpack的功能限制

module:{

rules:[{

test:/\.vue$/     檢測文件類型

loader:‘vue-loader’    使用loader處理vue

},

{

test:/\.jxs$/     檢測文件類型

loader:‘bable-loader’    使用loader處理jsx

},

{

test:/\.css$/     檢測文件類型,dev環境用不到css,都是用stylus,應該去掉這個配置

use:[

'style-loader',

css-loader’ 

]   使用loader處理css,不同的處理方式,將css在js里以一段js代碼出現,js代碼的作用就是把css寫到html

},

{//處理圖片

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

use:[{

loader:'url-loader'//圖片轉換為base64代碼,寫在js裡面

option:{//option傳到url-loader參數

limit:1024//圖片大小小於1024,就寫成base64代碼

name:'[name]-aaa.[ext]' //進來的名字name,ext文件擴展名,aaa後加后加上去

}}]},

 

'stylus-loader',//自動生成sourcemap,兩個可以更快

]}]

},

plugin:[

new webpack.DefinePlugin({//vue和react都會用,打包的時候根據環境選擇不同的版本代碼打包,

'process.env':{

NODE_ENV:isDev?'"development"':'"production"'//變量是單引號+雙引號

}

})

new HTMLPlugin(),

 

]

 

 

}

if(isDev){       //如果是開發環境,就增加config設置

config.output.filename='[name].[chunkhash:8].js'

config.module.rules.pust(

{//需要區分環境來做,需要剪切掉

text:/\.styl/,

use:[

'style-loader',

'css-loader',

{

loader:'postcss-loader',//自動生成sourcemap,前面生成就自動調用

option:{

sourcemap:true,

}

},

'sylus-loader']})

config.devtool='#cheap-module-eval-source-map'//用來在頁面上調試代碼,eval快速,soure-map完整性好,二者合併,又快又準確

config.devServer={

port=8000,

host:‘0.0.0.0’,//既可以在本地訪問,也可以接收外來訪問

overlay:

{errors:true,//如果編譯有錯誤,就顯示到網頁上},

hot:true//hot-module-replacement,防止修改組件內容后,整個頁面重新加載,可以使得頁面不刷新,就更新局部內容

open:true, //啟動dev-server,自動打開瀏覽器

}

config.plugins.push(

new webpack.HotModuleReplacementPlugin()//熱加載使用vueloader已經實現一些功能

new webpack.NotEmitOnErrorsPlugin()//避免不必要的錯誤的顯示

)

}else//正式環境

{

config.entry={

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

vendor:['vue']

}

config.module.rules.push({

text:'/\.style/'/

use:ExtractPlugin.extract({

fallback:'style-loader',//將處理后的css代碼包裹js代碼,js代碼的作用就是把css代碼寫到html中。寫進style標籤

use:[

'css-loader',//處理css代碼,樣式寫進單獨的css文件中

{

loader:'postcss-loader',//自動生成sourcemap,前面生成就自動調用

option:{

sourcemap:true,

}

},

'sylus-loader'

]

})

},

config.plugin.push(

new Extractplugin('styles.[contentHash:8].css'),//根據css輸出的內容生成一個單獨的hash

new webpack.optimize.CommomsChunPlugin({//類庫文件就可以單獨打包出來了

name:'vender'//分離類庫文件,使得app.vue的大小變小

}),

new webpack.optimize.CommonsChunkPlugin({//webpack相關的文件單獨打包

name:'runtime'//把新的模塊加入給定id,id中間插入,使得模塊id變化,導致想要使用瀏覽器常緩存的想法失敗,runtime放在vendor放入後面,沒有在entry里聲明的任何一個名字

})

)

}

module.exports=config//這樣就可以修改config

 


index.js:入口文件,可以引入APP.vue,加入类库,使得APP.vue能够显示。

import Vue from ‘vue’:引入主件

import vue from './app.vue'

import ‘./assets/style/text.css’

import 'bg.jpeg'

const root=ducment.createElement('div')//節點

//節點插入到html

new Vue({

render:(h)=>h(App)//視圖渲染

}).$mount(root)//節點綁定

 

 

package.json:

script{

"bulid":"cross-env NODE_ENV=production webpack --config webpack.config.js"//指定config文件為webpack.config.js,在這裡調用避免使用全局webpack

//cross-env NODE_ENV判斷是什麼開發環境還是生產環境,cross使得在不同平台上都可以用

"dev":"cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js"//設置dev環境下的webpack

}

運行指令:npm run build增加build.js

build.js

組成:依賴+vue源碼

修改module后,需要安裝相關loader。

npm i  file-loader  url-loader   vue-loader

 

創建styles文件夾,創建text.css

text.css:

body{

color:red

background-image:url('../images/done.svg')

}

js圖片引入

新建text.stylus.styl

 

webpack-dev-server

環境變量:

npm i cross-env

入口html,容納js

npm i html-webpack-plugin

npm run dev

 npm i postcss-loader autoprefixer babel-loader babel-core

創建postcss.config.css:

const autoprefixer=require('autoprefixer')//編譯后優化css代碼

module.exports={

plugins:[

antuprefixer()//自動增加瀏覽器前綴

]

}

 

.beble://render和jsx支持

{

“presets”:[

"env"

],

"plugin":[

"transform-vue-jsx"

]

}

npm i bable-preset-env bable-plugin-transform-vue-jsx

npm i babel-helper-vue-jsx-merge-proos babel-plugin-syntax-jsx

項目開始前刪除測試內容。

 

 

css打包:把css從bund.js打包出來

npm run build

hash

dev使用hash,build使用chunkhash.

chunkhash:chunk就是在entry里聲明的不同節點,使用異步加載的模塊,每一個模塊都是一個chunk

hash:所有打包出來的模塊都一個hash,就是應用的hash

 

posted @ 2019-03-24 21:43  web前端日志  阅读(271)  评论(0编辑  收藏  举报