资讯专栏INFORMATION COLUMN

webpack4搭建脚手架_04

JowayYoung / 1766人阅读

摘要:入门和使用介绍这是的上的基本的介绍本质上,是一个现代应用程序的静态模块打包器。在处理应用程序时,它会在内部创建一个依赖图,用于映射到项目需要的每个模块,然后将所有这些依赖生成到一个或多个。的文档新接手的项目,从轮子开始就自己搭建。

webpack4入门和使用 webpack介绍

这是webpak的上的基本的介绍:本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(static module bundler)。在 webpack 处理应用程序时,它会在内部创建一个依赖图(dependency graph),用于映射到项目需要的每个模块,然后将所有这些依赖生成到一个或多个bundle。
webpack的文档 https://webpack.docschina.org...
新接手的项目,从轮子开始就自己搭建。网上也找了很久的,也没找到很合适的轮子,那就自己建一个吧。wewebpack4 也更新了很多东西。

新建项目
mkdir webpack-init
cd webpack-init
npm init

之后就跟着提示把package.json中的信息补充完整就可以了.

新建JS文件

目录

.
├── ./package.json
├── ./src
│   └── ./src/index.js
├── ./webpack.config.js
├── ./yarn-error.log
└── ./yarn.lock

其中webpack.config.js 如下

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin"); //通过 npm 安装

module.exports = {
    entry: "./src/index.js", //入口文件,src下的index.js
    output: {
        path: path.join(__dirname, "dist"), // 出口目录,dist文件
        filename: "[name].[hash].js" //这里name就是打包出来的文件名,因为是单入口,就是main,多入口下回分解
    },
    module: {},
    plugin: [],
    devServer: {
        contentBase: path.join(__dirname, "dist"), //静态文件根目录
        port: 8080, // 端口
        host: "localhost",
        overlay: true,
        compress: true // 服务器返回浏览器的时候是否启动gzip压缩
    }
};
添加插件 js文件加载
yarn add ]babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-stage-0 -D

新建.babelrc 文件

 {
   "presets": [
     "es2015",
     "react",
     "stage-0"
   ],
   "plugins": []
//babel-core 调用Babel的API进行转码
//babel-loader
//babel-preset-es2015 用于解析 ES6
//babel-preset-react 用于解析 JSX
//babel-preset-stage-0 用于解析 ES7 提案

 }
 /*src文件夹下面的以.js结尾的文件,要使用babel解析*/
 /*cacheDirectory是用来缓存编译结果,下次编译加速*/
 module: {
     rules: [{
         test: /.js$/,
         use: ["babel-loader?cacheDirectory=true"],
         include: path.join(__dirname, "src")
     }]
 }
css文件加载
yarn add style-loader -D
yarn add  css-loader -D

添加配置:

 rules: {
        test: /.css$/,
        use: ["style-laoder", "css-loader"],
        include: path.join(__dirname, "src"), //限制范围,提高打包速度
        exclude: /node_modules/
    }
html模板生成
//通过 npm 安装 webpack.config.js头部添加
const HtmlWebpackPlugin = require("html-webpack-plugin"); 
//插件添加
plugin: [
        // 通过new一下这个类来使用插件
        new HtmlWebpackPlugin({
            // 用哪个html作为模板
            // 在src目录下创建一个index.html页面当做模板来用
            template: "./src/index.html",
            hash: true // 会在打包好的bundle.js后面加上hash串
        })
    ]

复制静态资源
yarn add copy-webpack-plugin -D

添加插件配置

new CopyWebpackPlugin([
  {
    from: path.resolve(__dirname, "public/static"),
    to: path.resolve(__dirname, "dist/static"),
    ignore: [".*"]
  }
])
webpack.base.conf.js
// webpack.base.conf.js
const path = require("path");

const APP_PATH = path.resolve(__dirname, "../src");
const DIST_PATH = path.resolve(__dirname, "../dist");
module.exports = {
  entry: {
    app: ["./src/index.js"],
  },
  output: {
    // filename: "js/[name].[hash].js", //使用hash进行标记,
    filename: "[name].[chunkhash].js",
    chunkFilename: "[name].[chunkhash].js",
    path: DIST_PATH,
  },
  module: {
    rules: [
      {
        test: /.js|jsx$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
        },
      },
      {
        test: /.scss$/,
        use: [
          {
            loader: "style-loader", // 将 JS 字符串生成为 style 节点
          },
          {
            loader: "css-loader", // 将 CSS 转化成 CommonJS 模块
          },
          {
            loader: "sass-loader", // 将 Sass 编译成 CSS
          },
        ],
      },
      {
        // 使用css配置
        test: /.css$/,
        loader: "style-loader!css-loader",
      },
      {
        // 使用less配置
        test: /.less$/,
        loader: "style-loader!css-loader",
      },
      {
        test: /.(png|jpg|gif)$/,
        use: [
          {
            loader: "url-loader",
            options: {
              limit: 8192,
              name: "images/[hash].[ext]", // 所有图片在一个目录
            },
          },
        ],
      },
    ],
  },
};
webpack.dev.conf.js
const path = require("path");
const merge = require("webpack-merge");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack = require("webpack");
const baseWebpackConfig = require("./webpack.base.conf.js");

module.exports = merge(baseWebpackConfig, {
  mode: "development",
  output: {
    filename: "js/[name].[hash].js",
  },
  // 源错误检查
  devtool: "inline-source-map",
  plugins: [
    // 处理html
    new HtmlWebpackPlugin({
      template: "public/index.html",
      inject: "body",
      minify: {
        html5: true,
      },
      hash: false,
    }),
    // 热更新
    new webpack.HotModuleReplacementPlugin(),
  ],
  // 热更新
  devServer: {
    port: "3200",
    contentBase: path.join(__dirname, "../public"),
    historyApiFallback: true,
    hot: true, // 开启
    https: false,
    noInfo: true,
    open: true,
    proxy: {
      // "/": {
      //   target: "http://internal.api.pre.ucloudadmin.com",
      //   changeOrigin: true,
      //   secure: false,
      // },
    },
  },
});
webpack.prod.conf.js 文件
// webpack.prod.conf.js 文件
const CleanWebpackPlugin = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
  .BundleAnalyzerPlugin;
const CopyWebpackPlugin = require("copy-webpack-plugin");
const merge = require("webpack-merge"); // 合并配置
const webpack = require("webpack");
const baseWebpackConfig = require("./webpack.base.conf");

module.exports = merge(baseWebpackConfig, {
  mode: "production", // mode是webpack4新增的模式
  plugins: [
    new HtmlWebpackPlugin({
      template: "public/index.html",
      title: "Pareto", // 更改HTML的title的内容
      favicon: "public/favicon.ico",
      minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true,
      },
    }),
    new CleanWebpackPlugin(["../dist"], { allowExternal: true }),
    new BundleAnalyzerPlugin(),
    new CopyWebpackPlugin([
      {
        from: "public/index.css",
        to: "../dist",
      },
    ]),
  ],
  optimization: {
    // runtimeChunk: {
    //     name: "manifest"
    // },
    splitChunks: {
      cacheGroups: {
        commons: {
          chunks: "initial",
          minChunks: 2,
          maxInitialRequests: 5,
          minSize: 0,
        },
        vendor: {
          // 将第三方模块提取出来
          test: /node_modules/,
          chunks: "initial",
          name: "vendor",
          priority: 10, // 优先
          enforce: true,
        },
      },
    },
  },
});

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98517.html

相关文章

  • webpack4详细教程,从无到有搭建react手架(二)

    摘要:相关链接详细教程,从无到有搭建脚手架一配置插件,这两个插件基本上是必配的了介绍每次打包时清理上次打包生成的目录官网指南关于这个插件部分内容已经过时没有更新,按照官网配置会出错,所以参考上这个插件文档来配置,文档地址生成打 相关链接 webpack4详细教程,从无到有搭建react脚手架(一) 配置插件 clean-webpack-plugin、 html-webpack-plugin...

    cuieney 评论0 收藏0
  • webpack4详细教程,从无到有搭建react手架(三)

    摘要:相关链接详细教程,从无到有搭建脚手架一详细教程,从无到有搭建脚手架二安装配置创建,效果安装配置创建效果配置模式修改配置现在编译后的由动态内联在中,需要分离到单独的文件安装插 相关链接 webpack4详细教程,从无到有搭建react脚手架(一) webpack4详细教程,从无到有搭建react脚手架(二) Css 安装loader yarn add style-loader css...

    Sunxb 评论0 收藏0
  • webpack4详细教程,从无到有搭建react手架(一)

    摘要:是一个现代应用程序的静态模块打包器,前端模块化的基础。作为一个前端工程师切图仔,非常有必要学习。官网的文档非常的棒,中文文档也非常给力,可以媲美的文档。建议先看概念篇章,再看指南,然后看和配置总览。 webpack 是一个现代 JavaScript 应用程序的静态模块打包器,前端模块化的基础。作为一个前端工程师(切图仔),非常有必要学习。 showImg(https://segment...

    zhkai 评论0 收藏0
  • webpack4详细教程,从无到有搭建react手架(四)

    摘要:相关链接详细教程,从无到有搭建脚手架一详细教程,从无到有搭建脚手架二详细教程,从无到有搭建脚手架三管理打包后目录结构打包结构如下修改配置通过相对目录对资源命名前加上目录名,效果后面的步骤在这里需要安装一个大型的包,以为例安装为第三 相关链接 webpack4详细教程,从无到有搭建react脚手架(一) webpack4详细教程,从无到有搭建react脚手架(二) webpack4详细...

    chnmagnus 评论0 收藏0
  • webpack4 系列教程: 前言

    摘要:课程地址全部课程地址立即进入课程源码目录截至按照知识点,目录分成了个文件夹之后还会持续更新。个人网站原文链接系列教程前言 本文档已经过时,最近内容请看:https://godbmw.com/passage/76。一共16节课程和代码。谢谢支持。 1. 什么是webpack? 前端目前最主流的javascript打包工具,在它的帮助下,开发者可以轻松地实现加密代码、多平台兼容。而最重要的...

    DevWiki 评论0 收藏0

发表评论

0条评论

JowayYoung

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<