2019-08-26

基本安裝

首先創(chuàng)建一個(gè)文件夾webpack-demo(名字自取),然后在本地安裝webpack,接著安裝webpack-cli

npm init -y
npm install webpack webpack-cli --save-dev

然后在主文件夾下新建一個(gè)src和public子文件夾和webpack.config.js配置文件

  • 在子文件夾public中新建index.html(此文件為入口文件模板,注意是模板)
  • 在子文件夾src內(nèi)新建main.js文件(此文件為項(xiàng)目入口主js文件)
webpack-demo
|- /public
    |- index.html
|- /src
    |- main.js
|- package-lock.json
|- package.json
|- webpack.config.js

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>webpack-demo</title>
</head>
<body>
    <div id="app"></div>
</body>
</html>

webpack-config.js

const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

安裝webpack-dev-server,能夠?yàn)槟闾峁┝艘粋€(gè)簡(jiǎn)單的 web 服務(wù)器,并且能夠?qū)崟r(shí)重新加載等等
安裝html-webpack-pluginclean-webpack-plugin插件

npm install --save-dev webpack-dev-server
npm install --save-dev html-webpack-plugin
npm install --save-dev clean-webpack-plugin

package.json

 {
    "name": "development",
    "version": "1.0.0",
    "description": "",
    "main": "webpack.config.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
+     "start": "webpack-dev-server --open --hot"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "html-webpack-plugin": "^2.29.0",
      "webpack": "^3.0.0",
      "webpack-cli": "^3.3.7",
      "clean-webpack-plugin": "^3.0.0",
    }
  }

webpack.config.js

const path = require('path');
+ const HtmlWebpackPlugin = require('html-webpack-plugin');
+ const { CleanWebpackPlugin } = require('clean-webpack-plugin');

  module.exports = {
    entry: {
      app: './src/main.js'
    },
+   plugins: [
+     new HtmlWebpackPlugin({
+       template:'./public/index.html',
+     }),
+     new CleanWebpackPlugin(),
+   ],
+   devServer: {
+     contentBase: './dist',
+     port: 8000
+   },
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    }
  };

為了從 JavaScript 模塊中 import 一個(gè) CSS 文件,你需要在 module 配置中 安裝并添加 style-loader 和 css-loader
為了可以在項(xiàng)目中引入圖片、字體文件,你需要在 module 配置中 安裝并添加 file-loader

npm install --save-dev style-loader css-loader
npm install --save-dev file-loader

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
    entry: './src/main.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template:'./public/index.html',
        }),
        new CleanWebpackPlugin(),
    ],
    devServer: {
        contentBase: './dist',
        port: 8000
    },
+   module: {
+       rules: [
+           {
+               test: /\.css$/,
+               use: [
+                   'style-loader',
+                   'css-loader'
+               ]
+           },
+           {
+               test: /\.(jpg|png|svg|gif)$/,
+               use: [
+                   'file-loader'
+               ]
+           },
+           {
+               test: /\.(woff|woff2|eot|ttf|otf)$/,
+               use: [
+                   'file-loader'
+               ]
+           }
+       ]
+   }
}

由于好多好用的代碼是ECMAScript 2015+ 版本的語(yǔ)法,瀏覽器無法識(shí)別,比如箭頭函數(shù)等等,因此需要安裝babel相關(guān)的模塊和插件來轉(zhuǎn)換為向后兼容的 JavaScript 語(yǔ)法(我只安裝一下常用的,如果你使用其他的,需要自己安裝和配置)

npm install --save-dev babel-loader
npm install --save-dev @babel/core @babel/cli @babel/preset-env
npm install --save-dev @babel/plugin-transform-arrow-functions
npm install --save-dev @babel/runtime @babel/plugin-transform-runtime

在主文件夾下面新建子文件夾babel.config.js

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
    entry: './src/main.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template:'./public/index.html',
        }),
        new CleanWebpackPlugin(),
    ],
    devServer: {
        contentBase: './dist',
        port: 8000
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(jpg|png|svg|gif)$/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    'file-loader'
                ]
            },
+           {
+               test: /\.js$/,
+               use: [
+                   'babel-loader'
+               ],
+               exclude: /node_modules/
+           },
        ]
    }
}

babel.config.js

module.exports = function (api) {
    api.cache(true);
  
    const presets = [
        '@babel/preset-env',
    ];
    const plugins = [
        '@babel/plugin-transform-arrow-functions',
        '@babel/plugin-transform-runtime'
    ];
  
    return {
      presets,
      plugins
    };
  }

Vue安裝

安裝vue相關(guān)的包

npm install vue --save
npm install --save-dev vue-loader vue-template-compiler

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
+ const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    entry: './src/main.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template:'./public/index.html',
        }),
        new CleanWebpackPlugin(),
+       new VueLoaderPlugin(),
    ],
    devServer: {
        contentBase: './dist',
        port: 8000
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(jpg|png|svg|gif)$/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.js$/,
                use: [
                    'babel-loader'
                ],
                exclude: /node_modules/
            },
+           {
+               test: /\.vue$/,
+               use: [
+                   'vue-loader'
+               ],
+           },
        ]
    }
}

安裝sass(sass是一個(gè)CSS預(yù)處理器,還挺好用,可以根據(jù)個(gè)人愛好安裝)

npm install --save-dev sass-loader
npm install --save-dev node-sass

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');

module.exports = {
    entry: './src/main.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    plugins: [
        new HtmlWebpackPlugin({
            template:'./public/index.html',
        }),
        new CleanWebpackPlugin(),
        new VueLoaderPlugin(),
    ],
    devServer: {
        contentBase: './dist',
        port: 8000
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(jpg|png|svg|gif)$/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.js$/,
                use: [
                    'babel-loader'
                ],
                exclude: /node_modules/
            },
            {
                test: /\.vue$/,
                use: [
                    'vue-loader'
                ],
            },
+           {
+               test:/\.scss$/,
+               use:[
+                   'style-loader',
+                   'css-loader',
+                   'sass-loader'
+               ]
+           },
        ]
    }
}

sass的使用如下:

  • 引入外部樣式使用
    import '../css/test.scss'
    
  • 在.vue中使用
    <style lang="scss">
        //sass語(yǔ)法樣式
    </style>
    

在子文件夾src下新建App.vue文件

main.js

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

new Vue({
    el: '#app',
    render: h => h(App),
});
webpack-demo
|- /public
    |- index.html
|- /src
    |- main.js
    |-App.vue
|- babel.config.js
|- package-lock.json
|- package.json
|- webpack.config.js

使用npm start啟動(dòng)項(xiàng)目

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 本文主要從webpack4.x入手,會(huì)對(duì)平時(shí)常用的Webpack配置一一講解,各個(gè)功能點(diǎn)都有對(duì)應(yīng)的詳細(xì)例子,...
    BetterChen閱讀 2,037評(píng)論 0 3
  • 1. 新建一個(gè)文件夾,命名為 webpack-cli , webpack-cli 就是你的項(xiàng)目名,項(xiàng)目名建議使用小...
    魯大師666閱讀 1,652評(píng)論 1 3
  • webpack 是什么? 本質(zhì)上,webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的靜態(tài)模塊打包器(mo...
    IT老馬閱讀 3,563評(píng)論 2 27
  • 非常感謝胖哥的博客和掘金小冊(cè)的技術(shù)分享,希望大家去下面的鏈接去查看原文,他們寫的非常好,都是多個(gè)項(xiàng)目經(jīng)驗(yàn)的總結(jié)??!...
    示十閱讀 2,378評(píng)論 0 2
  • 每周最安心的時(shí)刻,就是現(xiàn)在。姚寶在上橋牌課,我擺個(gè)電腦,坐在一張橋牌桌上,隨意在電腦上干點(diǎn)什么。 人啊,只有擺正了...
    書有清香閱讀 1,549評(píng)論 0 3

友情鏈接更多精彩內(nèi)容