基于Webpack Vue Vue-Router搭建前端開發(fā)環(huán)境

前端開發(fā)一步步發(fā)展催生了很多工具、組件贺待、腳手架徽曲,好處是確實便利了項目的快速搭建,但是害處也很大:用慣了工具也許開發(fā)麸塞,也許兩年過去了仍舊對基礎(chǔ)原理仍舊一無所知疟位。

比如,如何用原生dom來操作界面綁定事件都沒學會喘垂,就開始用Vue甜刻;再比如對Webpack的所解決的時間開發(fā)問題沒有感知前就開始用Vue-Cli也是一樣。

本篇嘗試從最簡單的例子開始正勒,一步一步介紹如何基于Webpack+Vue+Vue-Router配置項目環(huán)境得院,并隨著項目開發(fā)的深入介紹一些更進階的配置。

完整的代碼可以通過 https://github.com/tangyefei/simplest-webpack-vue下載

1. 準備

基礎(chǔ)的前端開發(fā)知識HTML/JS/CSS是必須的章贞,然后應(yīng)該能夠基于Webpack的文檔將 Concepts祥绞、GuideAsset Management鸭限、Development 部分動手實踐過蜕径。

2. 初始化

mkdir simplest-webpack-vue
cd simplest-webpack-vue
npm init -y
npm install -D webpack webpack-cli webpack-dev-server

此時的項目結(jié)構(gòu)如下:

simplest-webpack-vue
  - dist
    - index.html
  - src
    - main.js
  - packge.json
  - webpack.config.js

webpack-config.js

const path = require('path');

module.exports = {
  mode: 'development',
  entry: {
    index: './src/main.js',
  },
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer: {
    contentBase: './dist'
  }
};

main.js

var ele = document.createElement('div');
ele.innerText = 'hello';
document.body.append(ele);

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>my project</title>
</head>
<body>
  <script src="./index.bundle.js"></script>
</body>
</html>

3. 集成Vue

我們參考 vue-loader 先安裝 vue vue-loader vue-template-compiler。然后在 webpack.config.js 中配置 vue-loader败京。

因為webpack加載非JS的文件會按照配置的rules依次進行處理兜喻,而在標準的vue文件中,除了template包裹的html內(nèi)容意外赡麦,還會有<style>包裹的css 和 <script>包裹的JS朴皆,因此還需要提供css-loader+style-loader用于處理樣式,babel-loader用于處理JS泛粹。

npm install -P vue
npm install -D @babel/core @babel/preset-env vue-loader vue-template-compiler babel-loader css-loader  vue-style-loader css-loader 

webpack.config.js 增加的部分如下


const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {

  plugins: [
    new VueLoaderPlugin()
  ],
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ]
      },
    ]
  }
};

關(guān)于babel需要特別注意的一點是遂铡,從版本7開始,balbel包名規(guī)則從 babel-core 變成了 @babel/core晶姊,如果發(fā)現(xiàn) babel-loader 報出了 依賴的babel-core未找到的錯誤扒接,我們需要制定 babel-loader安裝最新的版本即可。

此時的項目結(jié)構(gòu)如下

simplest-webpack-vue
  - dist
    - index.html
  - src
    - App.vue
    - main.js
  - packge.json
  - webpack.config.js

dist/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>my project</title>
</head>
<body id="app">
  <script src="./index.bundle.js"></script>
</body>
</html>

src/App.vue

<style>
  .app {color: red}
</style>

<template>
  <div class="app">{{msg}}</div>
</template>
<script>
export default {
  data() {
    return {msg}
  }
}
</script>

src/main.js

import Vue from 'vue';
import App from './App.vue';

new Vue({
  render: h => h(App),
}).$mount('#app');

執(zhí)行 npm run start 可以看到 HTML渲染了來自JS的變量并且顏色被應(yīng)用成了CSS紅色们衙。

3. 集成 Vue-Router

首先安裝 vue-router

npm install -D vue-router

繼續(xù)修改和新增必要的文件钾怔,文件夾結(jié)構(gòu)圖如下所示:

simplest-webpack-vue
  - dist
    - index.html
  - src
    - components
      - Home.vue
      - Products.vue
    - js
      - common
        - router-config.js
    - App.vue
    - main.js
  - packge.json
  - webpack.config.js

webpack.config.js

module.exports = {

  resolve: {
    alias: {
      cp: path.resolve(__dirname, 'src/components/'),
      js: path.resolve(__dirname, 'src/js/'),
      css: path.resolve(__dirname, 'src/css/')
    }
  },
  
}  

src/main.js

import Vue from 'vue';
import VueRouter from 'vue-router';
import RouterConfig from 'js/common/router-config.js';

import App from './App.vue';

Vue.use(VueRouter)

new Vue({
  render: h => h(App),
  router: new VueRouter(RouterConfig)
}).$mount('#app');

js/common/router-config.js

import Home from "cp/Home.vue";
import Products from "cp/Products.vue";

export default {
  routes: [{
    name: 'home', path: '/', component: Home
  },{
    name: 'products', path: '/products', component: Products
  }]
}

src/App.vue

<template>
  <div id="app"><router-view></router-view></div>
</template>

src/components/Home.vue

<template>
  <div class="home-page">
    home page
  </div>
</template>

src/components/Products.vue

<template>
  <div class="products-page">
    products
  </div>
</template>

執(zhí)行 npm npm run start可以通過切換 //products 來看到不同的內(nèi)容被渲染成功。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砍艾,一起剝皮案震驚了整個濱河市蒂教,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脆荷,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜓谋,居然都是意外死亡梦皮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門桃焕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剑肯,“玉大人,你說我怎么就攤上這事观堂∪猛” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵师痕,是天一觀的道長溃睹。 經(jīng)常有香客問我,道長胰坟,這世上最難降的妖魔是什么因篇? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮笔横,結(jié)果婚禮上竞滓,老公的妹妹穿的比我還像新娘。我一直安慰自己吹缔,他們只是感情好商佑,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厢塘,像睡著了一般莉御。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俗冻,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天礁叔,我揣著相機與錄音,去河邊找鬼迄薄。 笑死琅关,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的讥蔽。 我是一名探鬼主播涣易,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冶伞!你這毒婦竟也來了新症?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤响禽,失蹤者是張志新(化名)和其女友劉穎徒爹,沒想到半個月后荚醒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡隆嗅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年界阁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖喳。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡泡躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丽焊,到底是詐尸還是另有隱情较剃,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布技健,位于F島的核電站写穴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凫乖。R本人自食惡果不足惜确垫,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帽芽。 院中可真熱鬧删掀,春花似錦、人聲如沸导街。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搬瑰。三九已至款票,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泽论,已是汗流浹背艾少。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翼悴,地道東北人缚够。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像鹦赎,于是被迫代替她去往敵國和親谍椅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355