vue-cli + webpack 多頁面執行個體應用

來源:互聯網
上載者:User

標籤:

關於vue.js

vue.js是一套構建使用者介面的 輕型的漸進式前端架構。它的目標是通過儘可能簡單的 API 實現響應的資料繫結和組合的視圖組件。使用vue可以給你的開發帶來極致的編程體驗。

關於vue-cli

Vue-cli是vue官方提供的一個命令列工具(vue-cli),可用於快速搭建大型單頁應用。該工具提供開箱即用的構建工具配置,帶來現代化的前端開發流程。只需一分鐘即可啟動帶熱重載、儲存時靜態檢查以及可用於生產環境的構建配置的項目。

疑問

vue-cli主要是用於構建單頁應用的腳手架,但是現實項目中,大部分項目都是多頁的,怎麼樣可以很好的利用這一套官方配置呢?我在網上找了一下, 幾乎找不到vue多頁應用執行個體,所以才有基於vue-cli產生的單頁應用進行改造。

代碼地址:

Github:https://github.com/breezefeng/vue-cli-multipage

使用方法
# install dependenciesnpm install# serve with hot reload at localhost:8080/module/index.htmlnpm run dev# build for production with minificationnpm run build
目錄結構
vue-cli-multipage  |---build  |---config  |---src    |---assets      |---img 圖片檔案      |---css 樣式檔案      |---font 字型檔          |---components  組件      |---Button.vue 按鈕組件      |---Hello.vue    |---module      |---index  首頁模組        |---index.html        |---index.js        |---App.vue      |---detail  詳情頁模組        |---detail.html        |---detail.js        |---App.vue

從目錄結構上,各種組件、頁面模組、資源等都按類建立了檔案夾,方便我們儲存檔案。

其實我們所有的檔案,最主要都是放在module檔案夾裡,以檔案夾名為html的名稱。

例如:

|---index  首頁模組  |---index.html  |---index.js  |---App.vue

此時我們訪問的連結是:

http://localhost:8080/module/index.html

這裡一定要注意,在module裡下級檔案夾裡需要將html,js,vue template 都統一放在當前檔案夾裡,當然你也可以繼續放其他的資源,例如css、圖片、組件等,webpack會打包到當前頁面裡。

如果項目不需要這個頁面了,可以把這個檔案夾直接刪除掉,乾淨利落,幹活也開心。

像以前傳統的開發項目,所有的圖片都習慣放在images裡,當項目有改動時,有些圖片等資源用不上了,但還佔著坑位,導致項目越來越大,雖然現在的硬體容量大到驚人,但我們應該還是要養到一個良好的習慣。

組件的使用

組件(Component)是 vue.js 最強大的功能之一,當你發現使用組件可以減少造輪子裡,你會深深的愛上它。

我們的組件都是放在components目錄下的,調用組件的方法也很簡單。

import Hello from ‘components/Hello‘

然後記得在*.vue註冊匯入的組件,要不然會無法使用。

import Hello from ‘components/Hello‘export default {  name: ‘app‘,  components: {    //在這裡註冊組件,不然無法使用    Hello  }}

 

構建代碼說明

那我們使用的是vue-cli的手腳架,用過vue-cli的同學都知道構建代碼是放在根目錄build下,vue多頁面主要修改了這三個JS檔案:webpack.base.conf.js、webpack.dev.conf.js、webpack.prod.conf.js。

/****    [webpack.base.conf.js]這裡主要列出相關代碼的修改點,具體代碼請看build/webpack.base.conf.js*/var entries = getEntry(‘./src/module/**/*.js‘); // 獲得入口js檔案module.exports = {  entry: entries,  ....}function getEntry(globPath) {  var entries = {},    basename, tmp, pathname;  glob.sync(globPath).forEach(function (entry) {    basename = path.basename(entry, path.extname(entry));    tmp = entry.split(‘/‘).splice(-3);    pathname = tmp.splice(0, 1) + ‘/‘ + basename; // 正確輸出js和html的路徑    entries[pathname] = entry;  });  return entries;}
/****    [webpack.prod.conf.js]這裡主要列出相關代碼的修改點,具體代碼請看build/webpack.base.prod.js*/function getEntry(globPath) {  var entries = {},    basename, tmp, pathname;  glob.sync(globPath).forEach(function (entry) {    basename = path.basename(entry, path.extname(entry));    tmp = entry.split(‘/‘).splice(-3);    pathname = tmp.splice(0, 1) + ‘/‘ + basename; // 正確輸出js和html的路徑    entries[pathname] = entry;  });  return entries;}var pages = getEntry(‘./src/module/**/*.html‘);for (var pathname in pages) {  // 配置產生的html檔案,定義路徑等  var conf = {    filename: pathname + ‘.html‘,    template: pages[pathname],   // 模板路徑    inject: true,              // js插入位置    minify: {      //removeComments: true,      //collapseWhitespace: true,      //removeAttributeQuotes: true    },    // necessary to consistently work with multiple chunks via CommonsChunkPlugin    chunksSortMode: ‘dependency‘  };  if (pathname in module.exports.entry) {    conf.chunks = [‘manifest‘, ‘vendor‘, pathname];    conf.hash = true;  }  module.exports.plugins.push(new HtmlWebpackPlugin(conf));}

 修改的代碼不是很多,但是卻為多頁應用提供了強大的構建支援。歡迎大家使用,也希望大家多多交流。

 

vue-cli + webpack 多頁面執行個體應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.