1.全局安裝vue-cli:Vue.js官方提供的用于快速創(chuàng)建項(xiàng)目模板的腳手架工具
$ npm install -g vue-cli
$ yarn global add vue-cli
2.創(chuàng)建項(xiàng)目模板:官方提供了五個(gè)模板--webpack鹦倚、webpack-simple蒸痹、browserify左敌、browserify-simple、simple,選擇webpack模板
$ vue init webpack project-name
3.在安裝過程中會有一些提示:
1)Vue build這個(gè)選項(xiàng)選擇Runtime + Compiler
2)安裝vue-router,ESLint躯舔、Karma+Mocha、Nightwatch根據(jù)需求選擇安裝
3)根據(jù)提示操作省古,即可成功啟動(dòng)項(xiàng)目
4.現(xiàn)在創(chuàng)建的項(xiàng)目模板是單頁面應(yīng)用,與多頁面應(yīng)用還有些差別丧失,需要做一些調(diào)整:
1)項(xiàng)目目錄結(jié)構(gòu)的調(diào)整:
在開發(fā)路徑src下增加modules和pages文件夾豺妓,分別存放模塊和頁面
有關(guān)頁面的所有文件都放到同一文件夾下就近管理:index.html(頁面模板)、main.js(頁面入口文件)布讹、App.vue(頁面使用的組件琳拭,公用組件放到components文件夾下)、router(頁面的路由配置)描验、assets(頁面的靜態(tài)資源)都移到index文件夾下白嘁,并把main.js改為index.js,保證頁面的入口js文件和模板文件的名稱一致
2)在build/utils.js中添加兩個(gè)方法:webpack多入口文件和多頁面輸出
var path = require('path')
var glob = require('glob')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var PAGE_PATH = path.resolve(__dirname, '../src/pages')
var merge = require('webpack-merge')
//多入口配置
exports.entries = function() {
var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
var map = {}
entryFiles.forEach((filePath) => {
var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
map[filename] = filePath
})
return map
}
//多頁面輸出配置
exports.htmlPlugin = function() {
let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
let arr = []
entryHtml.forEach((filePath) => {
let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
let conf = {
template: filePath,
filename: filename + '.html',
chunks: [filename],
inject: true
}
if (process.env.NODE_ENV === 'production') {
conf = merge(conf, {
chunks: ['manifest', 'vendor', filename],
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
})
}
arr.push(new HtmlWebpackPlugin(conf))
})
return arr
}
3)修改build/webpack.base.conf.js的入口配置
module.exports = {
entry: utils.entries(),
...
4)修改build/webpack.dev.conf.js和build/webpack.prod.conf.js的多頁面配置:把原有的頁面模板配置注釋或刪除,并把多頁面配置添加到plugins
webpack.dev.conf.js:
plugins: [
......
// new HtmlWebpackPlugin({
// filename: 'index.html',
// template: 'index.html',
// inject: true
// }),
......
].concat(utils.htmlPlugin())
webpack.prod.conf.js:
plugins: [
......
// new HtmlWebpackPlugin({
// filename: config.build.index,
// template: 'index.html',
// inject: true,
// minify: {
// removeComments: true,
// collapseWhitespace: true,
// removeAttributeQuotes: true
// },
// chunksSortMode: 'dependency'
// }),
......
].concat(utils.htmlPlugin())
補(bǔ)充說明:在上面多頁面輸出配置中有這樣一行代碼:
chunks: ['manifest', 'vendor', filename],
這是html-webpack-plugin插件對頁面入口文件(即js文件)的限定膘流,如果不設(shè)置則會把整個(gè)項(xiàng)目下的所有入口文件全部引入
為什么要引入'manifest'和'vendor'絮缅,在build/webpack.prod.conf.js中有如下代碼:
// split vendor js into its own file
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
minChunks: function (module, count) {
// any required modules inside node_modules are extracted to vendor
return (
module.resource &&
/\.js$/.test(module.resource) &&
module.resource.indexOf(
path.join(__dirname, '../node_modules')
) === 0
)
}
}),
// extract webpack runtime and module manifest to its own file in order to
// prevent vendor hash from being updated whenever app bundle is updated
new webpack.optimize.CommonsChunkPlugin({
name: 'manifest',
chunks: ['vendor']
}),
vendor模塊是指提取涉及node_modules中的公共模塊
manifest模塊是對vendor模塊做的緩存
關(guān)于CommonsChunkPlugin插件的詳細(xì)說明請閱讀官方文檔
關(guān)于html-webpack-plugin插件的配置還有一行代碼:
chunksSortMode: 'dependency'
插件會按照模塊的依賴關(guān)系依次加載鲁沥,即:manifest,vendor耕魄,本頁面入口画恰,其他頁面入口...
至此,多頁面應(yīng)用已經(jīng)搭建完畢吸奴,只需要在pages文件夾創(chuàng)建相應(yīng)的頁面文件即可允扇。
本文轉(zhuǎn)載自https://github.com/tonyfree/blog/issues/1
如果有什么不理解可以在下方留言
但是我依然覺得 nuxt會更適合上手 如果你是項(xiàng)目需要 建議使用nuxt.js