美文网首页
webpack 直接上手配置新项目

webpack 直接上手配置新项目

作者: 清汤饺子 | 来源:发表于2018-11-10 20:54 被阅读0次

这是一个可以打包css/img/js的webpack项目。es6可以自动编译。内置简单的服务器。可以做到热加载,npm run dev可以开始。npm start可以编译。img、css文件都会打包到单独的文件夹里。dist目录不需要手动清除。

  1. 新建项目文件夹,进入该目录。cmd进入命令模式
  2. 初始化项目依赖。webpack需要npm安装插件
    npm init -y
  3. 下面json文件替换npm init新建的package.json。然后npm install。
{
  "name": "jianshu",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open",
    "start": "webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-es2015": "^6.24.1",
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^1.0.1",
    "file-loader": "^2.0.0",
    "html-webpack-plugin": "^4.0.0-beta.3",
    "mini-css-extract-plugin": "^0.4.4",
    "style-loader": "^0.23.1",
    "uglifyjs-webpack-plugin": "^2.0.1",
    "webpack": "^4.25.1",
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.10",
    "webpack-merge": "^4.1.4"
  }
}

style-loader css-loader:css文件加载器
file-loader:图片加载器
clean-webpack-plugin:清理编译目录 文件夹
webpack-dev-server:webpack-dev-server 为你提供了一个简单的 web 服务器,并且能够实时重新加载(live reloading)。
html-webpack-plugin:虽然在 dist/ 文件夹我们已经有 index.html 这个文件,然而 HtmlWebpackPlugin 还是会默认生成 index.html 文件。这就是说,它会用新生成的 index.html 文件,把我们的原来的替换。
babel-loader@7 babel-core :bable解析js为浏览器支持的es5标准
babel-env-preset: 解析Es6
babel-preset-react:解析JSX

4.新建webpack.config.js
CleanWebpackPlugin :可以清除编译目录,不用每次编译都加入重复的文件。
HtmlWebpackPlugin :生成新的html文件。注意在编码目录下定义一个模板html文件。不然dist目录是不会更新的。
MiniCssExtractPlugin:将css文件打包成独立的css文件。

const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
    //多入口文件
    entry: './src/main.js',
    devtool: 'inline-source-map',//调试工具
    devServer: {
        contentBase: './dist',
        //下载的webpack-dev-server,可以提供简单的服务器以上配置告知
        // webpack-dev-server,在 localhost:8080 下建立服务,将 dist 目录下的文件,作为可访问文件。
        hot: true,   //热加载
        inline: true,//实时刷新
    },
    plugins: [
        new CleanWebpackPlugin('dist/*.*', {
            root: __dirname,
            verbose: true,
            dry: false
        }),//下载的clean-webpack-plugin插件,清理 /dist 文件夹
        new HtmlWebpackPlugin({
            template: __dirname + "/src/index.html"//new 一个这个插件的实例,并传入相关的参数
        }),//生成新的index.html文件
        new webpack.NamedModulesPlugin(),
        new webpack.HotModuleReplacementPlugin(),
        new MiniCssExtractPlugin({
            filename: "css/[name].[chunkhash:8].css",
            chunkFilename: "css/[id].css"
        })
    ],
    output: {
        filename: "bundle-[hash].js",//打包后输出文件的文件名
        path: path.resolve(__dirname, 'dist/'),
        publicPath: 'dist/'
    },
    // 模块对象
    module: {
        // 规则
        rules: [
            /*{
                // 正则匹配所有以.css结尾的文件
                test: /\.css$/,
                // 使用css-loader和style-loader依次对css文件进行处理
                // 按照数组中从后往前的顺序
                use: [ 'style-loader', 'css-loader' ]
            },*/
            {
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    "css-loader"
                ]
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                    'file-loader?name=images/[name].[hash:6].[ext]'
                ]
            },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            }
        ]
    }
};


  1. 创建这样的项目框架


    捕获.PNG

    index.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div class="wrap"></div>
<div class="wrap2"></div>
</body>
</html>

main.js

import './js/index'
import './js/app'
import './css/style.css'

相关文章

网友评论

      本文标题:webpack 直接上手配置新项目

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