webpack基础(一)webpack的基础配置

2019-05-25  本文已影响0人  前端开发爱好者

本系列文章的webpack版本未webpack4

安装webpack

yarn init -y //初始化工程
yarn add webpack webpack-cli -D

webpack默认配置

npx webpack //webpack所支持的语法

使用上面命令回去寻找node_module下的bin/webpack.cmd文件,文件如下

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\webpack\bin\webpack.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  "%~dp0\..\webpack\bin\webpack.js" %*
)
a.js
export const say = (a) => {
    console.log(a)
}

index.js
import {say} from './a';

say('hello webpack')

打包后直接运行 打印出hello webpack

生产环境:会进行代码压缩,去掉无关代码等

开发环境:

手动配置webpack

// webpack.config.js 文件
const path = require('path');

module.exports = {
    mode: "development" ,//模式,production development
    entry: './src/index.js', //入口
    output: {
        filename: "bundle.js",   //打包后的文件名
        path: path.resolve(__dirname, 'build')   //必须是绝对路径
    }
};

在node_module/webpack_cli/bin/config/config-yargs.js

79行:defaultDescription: "webpack.config.js or webpackfile.js",
npx webpack --confij webpack.config.mian.js //指定配置文件

package.json文件配置

{
    "scripts":{
        "build":"webpack --config webpack.config.mian.js"
    }
}
{
    "scripts":{
        "build":"webpack"
    }
}
执行:
npm run build -- --config 

webpack打包后结果分析

(function (modules) { // webpackBootstrap
    // 先定义一个缓存
    var installedModules = {};

    // 实现了 __webpack_require__方法
    function __webpack_require__(moduleId) {
        // Check if module is in cache
        if (installedModules[moduleId]) {
            return installedModules[moduleId].exports;
        }
        // Create a new module (and put it into the cache)
        var module = installedModules[moduleId] = {
            i: moduleId,
            l: false,   //是否加载完成
            exports: {}
        };
        // Execute the module function
        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
        // Flag the module as loaded
        module.l = true;
        // Return the exports of the module
        return module.exports;
    }

    return __webpack_require__(__webpack_require__.s = "./src/index.js"); //入口模块
})
({

    "./src/a.js":
        (function (module, __webpack_exports__, __webpack_require__) {

            "use strict";
            eval("__webpack_require__.r(__webpack_exports__);" +
                "\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"say\", function() { return say; });\n" +
                "const say = (a) => {\r\n    console.log(a)\r\n}\r\n\n\n//# sourceURL=webpack:///./src/a.js?");
        }),

    "./src/index.js":
        (function (module, __webpack_exports__, __webpack_require__) {
            "use strict";
            eval("__webpack_require__.r(__webpack_exports__);" +
                "\n/* harmony import */ var _a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./a */ \"./src/a.js\");" +
                "\n\r\n\r\nObject(_a__WEBPACK_IMPORTED_MODULE_0__[\"say\"])('hello webpack')\r\n\n\n//# sourceURL=webpack:///./src/index.js?");
        })
});

webpack的开发服务

yarn add webpack-dev-server -D

使用

npx webpack-dev-server

特点:不会去真正的打包文件,打包后的文件在内存中。
默认是当前的静态目录。

开发服务的配置

const path = require('path');

module.exports = {
    mode: "development",//模式,production development
    entry: './src/index.js', //入口
    output: {
        filename: "bundle.js",   //打包后的文件名
        path: path.resolve(__dirname, 'build')   //必须是绝对路径
    },
    devServer: {
        //开发服务器的配置
        port: 3000, //端口
        progress: true, //进度条
        contentBase: './build',  //目录
        open: true, //自动打开浏览器,
        compress: true  //gzip压缩。还有其他的,
        historyApiFallback:true,//在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html
    }
};

HTML插件

yarn add html-webpack-plugin -D

配置文件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    mode: "development",//模式,production development
    entry: './src/index.js', //入口
    output: {
        filename: "bundle.[hash:5].js",   //打包后的文件名,加哈希防止缓存覆盖
        // [hash:8]只显示8位哈希
        path: path.resolve(__dirname, 'build')   //必须是绝对路径
    },
    devServer: {
        //开发服务器的配置
        port: 3000, //端口
        progress: true, //进度条
        contentBase: './build',  //目录
        open: true, //自动打开浏览器,
        compress: true  //gzip压缩。还有其他的
    },
    plugins: [
        // 数组配置所有插件
        new HtmlWebpackPlugin({
            template: './src/index.html',    //模板地址
            filename: 'index.html', //打包后文件,
            minify: {
                removeAttributeQuotes: true, //删除双引号,
                collapseWhitespace:true,    //压缩成一行,
            },
            hash:true, //js文件后增加哈希
        })
    ]
};

生成后资源域名配置

打包后会传上CDN,所有资源都加前缀。如需单独则在各自的loader中加

output: {
        filename: "bundle.[hash:5].js",
        path: path.resolve(__dirname, 'build'),
        publicPath: "http://www.baidu.com/a"
    }
上一篇下一篇

猜你喜欢

热点阅读