Webpack:入门小demo

本文主要是记录webpack的简单入门操作,希望对刚入门的t同行有所帮助。
第一步:安装webpack;

//全局安装
npm install -g webpack
//安装到你的项目目录
npm install --save-dev webpack
//webpack4还需要安装webpac-cli
npm install --save-dev webpack-cli
npm install --save-dev webpack-dev-server

第二步:开始前准备;
新建一个文件夹,命名不能是webpack,我命名的是webpack_demo;然后打开cmd,初始化项目:npm init;完成后,文件夹内新建如下文件:
在这里插入图片描述
webpack.config.js的内容为:

module.exports = {
    entry: __dirname + "/public/js/index.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/dist", //打包后的文件存放的地方
        filename: "js/bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        // contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    }
}

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>Document</title>
</head>

<body>
    <div id="root"></div>
    <script src="js/bundle.js"></script>
</body>

</html>

public/index.js的内容为:

var header = require('./header')
var content = require('./content')
var footer = require('./footer')
document.getElementById('root').innerHTML = header + content + footer

public/footer.js,header.js,content.js的内容为:

module.exports = '<header>这是头部</header>'
module.exports = '<div class="content">这是正文</div>'
module.exports = '<footer>这是脚部</footer>'

第三步:尝试打包
在package.json文件中配置,如下:
在这里插入图片描述
在cmd输入,npm run server,成功打开浏览器;运行npm start,查看dist文件夹下是否有文件,有则打包成功。

第四步:使用loaders,Loaders是webpack提供的最激动人心的功能之一了。通过使用不同的loader,webpack有能力调用外部的脚本或工具,实现对不同格式的文件的处理,比如说分析转换scss为css,或者把下一代的JS文件(ES6,ES7)转换为现代浏览器兼容的JS文件,对React的开发而言,合适的Loaders可以把React的中用到的JSX文件转换为JS文件。
一般常用的是进行js版本转译,css加载,图片加载等。

babel-loader

npm install --save-dev babel-core babel-loader babel-preset-env

在webpack.config.js中配置Babel的方法如下:

module.exports = {
    entry: __dirname + "/public/js/index.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/dist", //打包后的文件存放的地方
        filename: "js/bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        // contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    },
    module: {
        rules: [{
            test: /(\.jsx|\.js)$/,
            use: {
                loader: "babel-loader",
                options: {
                    presets: [
                        "env"
                    ]
                }
            },
            exclude: /node_modules/
        }]
    }
}

css-loader

npm install --save-dev style-loader css-loader
module.exports = {
    entry: __dirname + "/public/js/index.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/dist", //打包后的文件存放的地方
        filename: "js/bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        // contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    },
    module: {
        rules: [{
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: [
                            "env"
                        ]
                    }
                },
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: [{
                    loader: "style-loader"
                }, {
                    loader: "css-loader"
                }]
            }
        ]
    }
}

npm run server查看打包效果,css和js是打包在一个js文件中。

插件(Plugins) :插件(Plugins)是用来拓展Webpack功能的,它们会在整个构建过程中生效,执行相关的任务。要使用某个插件,我们需要通过npm安装它,然后要做的就是在webpack配置中的plugins关键字部分添加该插件的一个实例(plugins是一个数组)继续上面的例子。
HtmlWebpackPlugin:这个插件的作用是依据一个简单的index.html模板,生成一个自动引用你打包后的JS文件的新index.html。这在每次生成的js文件名称不同时非常有用(比如添加了hash值)。
安装:

npm install --save-dev html-webpack-plugin
	1.public文件夹下创建一个index.html文件,和根目录下的index.html内容相同,只是不引入js;
	2.webpack配置如下:
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require("webpack")
module.exports = {
    entry: __dirname + "/public/js/index.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/dist", //打包后的文件存放的地方
        filename: "js/bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        // contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    },
    module: {
        rules: [{
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: [
                            "env"
                        ]
                    }
                },
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: [{
                    loader: "style-loader"
                }, {
                    loader: "css-loader"
                }]
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('版权所有,翻版必究'),
        new HtmlWebpackPlugin({
            template: __dirname + "/public/index.html" //new 一个这个插件的实例,并传入相关的参数
        })
    ],
}

npm start可以看到dist文件夹下生成index.html;但是你可以看到css和js是打包至一个js文件中,这是不利于我们的代码维护的,因此需要将css和JS分离。

使用mini-css-extract-plugin:
安装

npm install mini-css-extract-plugin --save-dev

webpack.config.js内容:

const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const webpack = require("webpack")
module.exports = {
    entry: __dirname + "/public/js/index.js", //已多次提及的唯一入口文件
    output: {
        path: __dirname + "/dist", //打包后的文件存放的地方
        filename: "js/bundle.js" //打包后输出文件的文件名
    },
    devServer: {
        // contentBase: "./public", //本地服务器所加载的页面所在的目录
        historyApiFallback: true, //不跳转
        inline: true //实时刷新
    },
    module: {
        rules: [{
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: [
                            "env"
                        ]
                    }
                },
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader,
                    "css-loader"
                ]
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('版权所有,翻版必究'),
        new HtmlWebpackPlugin({
            template: __dirname + "/public/index.html" //new 一个这个插件的实例,并传入相关的参数
        }),
        new MiniCssExtractPlugin({
            filename: "css/[name].css",
            chunkFilename: "css/[id].css"
        })
    ],
}

npm start打包完,即可以看到打包出来的dist文件夹下js和css分离开来。

以上只是loader只是部分操作事例,还有关于url-loader,vue-loader等等。

猜你喜欢

转载自blog.csdn.net/weixin_44599809/article/details/97813898