美文网首页webpack学习
webpack4从0搭建vue项目(基本配置)

webpack4从0搭建vue项目(基本配置)

作者: Benny_lzb | 来源:发表于2019-01-11 15:46 被阅读0次

前段时间接触了webpack4..看了它的官网还是懵逼的,还是自己动动手实践一下吧。这样才能理解到各个属性以及插件的作用。顺便搭建个目录结构,供自己以后使用~ 所以就来做个笔记吧;)
顺便带你绕过 vue-cli 3.0,用 webpack4 一步步搭建 vue 项目。

后续会补充优化过后的配置、以及多页面配置~未完哦

基本配置

  1. 新建vue-spa-template文件夹 并进入到当前路径 npm init初始化项目
  2. 安装webpack 四件套。 webpack、webpack-cli、webpack-merge、webpack-dev-server
    npm i webpack webpack-cli webpack-dev-server webpack-merge -D
  3. 安装 vue以及核心插件 vue-loader、vue-template-compiler 并配置vue-loader
    npm i vue -S (-S 等价于 -save) 一般是
    npm i vue-loader vue-template-compiler -D (-D等价于-save dev)

4.安装 html-webpack-plugin 它会自动帮你生成一个 html 文件,并且引用相关的 assets 文件(如 css, js)
   npm i html-webpack-plugin -D

  1. 处理加载样式css、less 安装css-loader、style-loader、less、less-loader并配置(如果有别的需求可自行配置)
    npm i css-loader style-loader -D
    npm i less less-loader -D
  2. 处理加载图片 url-loader(原本是 file-loader)
    npm i url-loader file-loader -D
1.url-loader依赖file-loader
2.当使用url-loader加载图片,图片大小小于上限值,则将图片转base64字符串,否则使用file-loader加载图片,都是为了提高浏览器加载图片速度。
3.使用url-loader加载图片比file-loader更优秀

以上6步是我认为每个项目都得用到的~ 安装完上面六步后,
新建目录、搭好基本的架构、并再相应的文件写好配置代码就ok了~~

文件目录如下(简陋版):

 |--build
      |--webpack.base.js
      |--webpack.dev.js
      |--webpack.prod.js
  |--src
      |--index.js
      |--app.vue
  |--index.html
// webpack.base.js  基本配置
const webpack = require('webpack');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
    entry:'./src/index.js',//入口
    module:{
        rules:[
            //配置vue-loader
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            //配样式loader
            {
                test:/\.(sa|c|le)ss$/,
                use:[
                    'style-loader',
                    'css-loader',
                    'less-loader',
                    'sass-loader'
                ]
            },
            //配图片
            {
                test:/\.(png|svg|jpg|gif)$/,
                use:[
                    {
                        //url-loader可以将图片转为base64字符串,能更快的加载图片,一旦图片过大,
                        //就需要使用file-loader的加载本地图片,故url-loader可以设置图片超过多少字节时,使用file-loader加载图片。
                        loader: 'url-loader',  
                        options: {
                            limit: 693061, 
                            // 分离图片至imgs文件夹
                            name: "imgs/[name].[hash:7].[ext]",
                        }
                    },
                ]
            },
            //配音频等media文件
            {
                test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name: 'media/[name].[hash:7].[ext]'
                }
            },
            //配字体
            {
                test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
                loader: 'url-loader',
                options: {
                    limit: 10000,
                    name:'fonts/[name].[hash:7].[ext]'
                }
            }
        ]
    },
    plugins:[
        //保持vender的hash不发生变化
        new webpack.HashedModuleIdsPlugin(),
        new VueLoaderPlugin(),
        // new webpack.HotModuleReplacementPlugin(),
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, '../index.html'),
        }),
    ]
}
//webpack.dev.js
const merge = require('webpack-merge'); //配置合并
const common = require('./webpack.base.js');
const path = require('path');


module.exports = merge(common, {
    devtool: 'source-map',
    devServer: { // 开发服务器
      contentBase: '../dist',
      open:true,
    },
    output: { // 输出
      filename: 'js/[name].[hash].js', // 每次保存 hash 都变化
      path: path.resolve(__dirname, '../dist')
    },
    module: {},
    mode: 'development',
});
//webpack.prod.js
const path = require('path');
const merge = require('webpack-merge'); // 合并配置文件
const common = require('./webpack.base.js');
module.exports = merge(common, {
  module: {},
  plugins: [],
  mode: 'production',
  output: {
    filename: 'js/[name].[contenthash].js', //contenthash 若文件内容无变化,则contenthash 名称不变
    path: path.resolve(__dirname, '../dist')
  },
});
<!-- app.vue -->
<!-- 图片路径自己改哈 -->

<template>
  <div id="app">
    {{message}}~ {{author}}fadfadfa~~
    <div class="test">gre</div>
    <img src="../src/resources/images/angle.png" alt="天使">

  </div>
</template>

<script>
export default {
  name: 'app',
  data(){
      return{
          message:'Hiadfaf',
          author:'Benny',
      }
  }



}
</script>
<style scoped lang="less">
#app{
    color:#ffffff;
    background: #009887;
    img{
        width: 200;
        height: 200;
    }
}
</style>

//index.js
import Vue from 'vue';
import App from './App.vue'
new Vue({
  el: '#app',
  render: h => h(App),
});
//index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Vue App</title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

最后在package.json文件配置下命令

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server --inline --progress --config build/webpack.dev.js",
    "build": "webpack --config build/webpack.prod.js"
  },

此时 npm start,项目可正常运行

相关文章

网友评论

    本文标题:webpack4从0搭建vue项目(基本配置)

    本文链接:https://www.haomeiwen.com/subject/yfduhqtx.html