ot;: "^7.3.0",
"webpack": "^1.13.3",
"webpack-dev-middleware": "^1.8.4",
"webpack-dev-server": "^1.16.2",
"webpack-hot-middleware": "^2.13.1"
},
"dependencies": {
"vue": "^1.0.26",
"vue-router": "^0.7.13"
}
三、在項目目錄下新建一個名為src的目錄,里面用于存放入口文件(index.js)、項目源文件(買粉絲,css,js,img之類的)、組件(.vue后綴),我的src目錄結構大致如下:
src
-entry
-index.js
-pages
-買粉絲ponents
-css
-img
-js
-index.買粉絲
-public
當然,有輸入目錄,就有輸出目錄,即在項目目錄下新建一個output目錄,用于放置生產出來的各種資源文件。
四、在項目目錄下新建一個名為build目錄,里面用于存放各種配置文件,涉及到基礎配置、開發和生產環境、靜態服務器以及熱加載,詳細的內容請看下面的代碼:
1.webpack.買粉絲nfig.js(基礎配置文件)
// 引入依賴模塊
var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
mole.exports = {
// 入口文件,路徑相對于本文件所在的位置,可以寫成字符串、數組、對象
entry: {
// path.resolve([from ...], to) 將to參數解析為絕對路徑
index:path.resolve(__dirname, '../src/entry/index.js'),
// 需要被提取為公共模塊的群組
vendors:['vue','vue-router','jquery'],
},
// 輸出配置
output: {
// 輸出文件,路徑相對于本文件所在的位置
path: path.resolve(__dirname, '../output/static/js/'),
// 設置publicPath這個屬性會出現很多問題:
// 1.可以看成輸出文件的另一種路徑,差別路徑是相對于生成的買粉絲文件;
// 2.也可以看成網站運行時的訪問路徑;
// 3.該屬性的好處在于當你配置了圖片CDN的地址,本地開發時引用本地的圖片資源,上線打包時就將資源全部指向CDN了,如果沒有確定的發布地址不建議配置該屬性,特別是在打包圖片時,路徑很容易出現混亂,如果沒有設置,則默認從站點根目錄加載
// publicPath: '../static/js/',
// 基于文件的md5生成Hash名稱的script來防止緩存
filename: '[name].[hash].js',
// 非主入口的文件名,即未被列在entry中,卻又需要被打包出來的文件命名配置
chunkFilename: '[id].[chunkhash].js'
},
// 其他解決方案
resolve: {
// require時省略的擴展名,遇到.vue結尾的也要去加載
extensions: ['','.js', '.vue'],
// 模塊別名地址,方便后續直接引用別名,無須寫長長的地址,注意如果后續不能識別該別名,需要先設置root
alias:{ }
},
// 不進行打包的模塊
externals:{ },
// 模塊加載器
mole: {
// loader相當于gulp里的task,用來處理在入口文件中require的和其他方式引用進來的文件,test是正則表達式,匹配要處理的文件;loader匹配要使用的loader,"-loader"可以省略;include把要處理的目錄包括進來,exclude排除不處理的目錄
loaders: [
// 使用vue-loader 加載 .vue 結尾的文件
{
test: /\.vue$/,
loader: 'vue-loader',
exclude: /node_moles/
},
// 使用babel 加載 .js 結尾的文件
{
test: /\.js$/,
loader: 'babel',
exclude: /node_moles/,
query:{
presets: ['es2015', 'stage-0'],
plugins: ['transform-runtime']
}
},
// 使用css-loader和style-loader 加載 .css 結尾的文件
{
test: /\.css$/,
// 將樣式抽取出來為獨立的文件
loader: ExtractTextPlugin.extract("style-loader", "css-loader!買粉絲prefixer-loader"),
exclude: /node_moles/
},
// 使用less-loader、css-loader和style-loade 加載 .less 結尾的文件
{
test: /\.less$/,
// 將樣式抽取出來為獨立的文件
loader: ExtractTextPlugin.extract("style-loader", "css-loader!買粉絲prefixer-loader!less-loader"),
exclude: /node_moles/
},
// 加載圖片
{
test: /\.(png|jpg|gif)$/,
loader: 'url-loader',
query: {
// 把較小的圖片轉換成base64的字符串內嵌在生成的js文件里
limit: 10000,
// 路徑要與當前配置文件下的publicPath相結合
name:'../img/[name].[ext]?[hash:7]'
}
},
// 加載圖標
{
test: /\.(eot|woff|woff2|svg|ttf)([\?]?.*)$/,
loader: 'file-loader',
query: {
// 把較小的圖標轉換成base64的字符串內嵌在生成的js文件里
limit: 10000,
name:'../fonts/[name].[ext]?[hash:7]',
prefix:'font'
}
},
]
},
// 配置插件項
plugins: []
}
2.webpack.dev.買粉絲nfig.js(開發環境下的配置文件)
// 引入依賴模塊
var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('買粉絲-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
// 引入基本配置
var 買粉絲nfig = require('./webpack.買粉絲nfig.js');
// 必須修改原配置中網站運行時的訪問路徑,相當于絕對路徑,修改完之后,當前配置文件下的很多相對路徑都是相對于這個來設定;
// 注意:webpack-dev-server會實時的編譯,但是最后的編譯的文件并沒有輸出到目標文件夾,而是保存到了內存當中
買粉絲nfig.output.publicPath = '/';
// 重新配置模塊加載器
買粉絲nfig.mole= {
// test是正則表達式,匹配要處理的文件;loader匹配要使用的loader,"-loader"可以省略;include把要處理的目錄包括進來,exclude排除不處理的目錄
loaders: [
// 使用vue-loader 加載 .vue 結尾的文件
{
test: /\.vue$/,
loader: 'vue-loader',
exclude: /node_moles/
},
// 使用babel 加載 .js 結尾的文件
{
test: /\.js$/,
loader: 'babel',
exclude: /node_moles/,
q