webpack学习(一):初步配置一个简单的webpack项目

一、关于webpack安装

当然,在安装webpack之前,你的本地需要已经安装好nodejs

全局安装
npm install --global webpack                         // 全局安装webpack
本地安装
npm install webpack                                  // 本地安装webpack

二、初始化

创建一个初始项目文件目录文件夹,例如(test01),通过cmd(或编辑器自带命令行工具)进入到项目文件夹目录下,运行

npm init                                            // 初始化项目结构信息,并生成package.json进行记录

注:当然,值得一提的是初始化过程中键入的信息不必太在意,实在不知道写什么一直敲击回车就行了

三、目录结构

在这里插入图片描述

其中build文件夹是打包后生成的目录,我们只需要手动创建
app文件夹(用于存放源js、css文件);
public文件夹(用于存放源html模板);
webpack.config.js(webpack配置的默认文件);

四、创建并编写源代码文件

// Greeter.js
module.exports = function() {
    var greet = document.createElement('div');
    greet.textContent = "Hi there and greetings!";
    return greet;
};
//main.js 
import './style.scss'                                       
const greeter = require('./Greeter.js');
document.querySelector("#root").appendChild(greeter());
<!-- 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><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
    <div id="root"></div>
</body>
</html>

值得注意的几个点:

  1. css或者scss等样式文件、以及图标、字体、图片等文件需要在入口文件导入(例如此处为main.js文件)
  2. html中的title标签可以用<%= htmlWebpackPlugin.options.title %>代替(后续会在webpack配置文件中定义title并插入这里)

五、打包依赖安装

在配置webpack之前,我们需要安装一些使用到的依赖包:

    "css-loader": "^1.0.1",                                  
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^2.0.0",
    "html-webpack-plugin": "^3.2.0",
    "node-sass": "^4.10.0",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "webpack": "^4.27.1",
    "webpack-cli": "^3.1.2"

以上是需要用到的依赖包,后面是版本号,安装命令如下:

npm install (依赖包名称)--save-dev 

解释一下:

  1. 需要打包scss,则需要安装node-sass和sass-loader(同理,如果需要使用其他预编译处理文件,可以去查一下相关的依赖包)
  2. 我们也要安装一些 打包css样式相关的插件:(–save-dev是将插件添加到devDependencies中)
    css-loader使你能够使用类似@import 和 url(…)的方法实现 require()的功能;
    style-loader将所有的计算后的样式加入页面中;
    二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。
  3. 简单来说,file-loader 就是将文件(一般是图片文件为主,其他的包括字体文件等),在进行一些处理后(主要是处理文件名和路径),移动打包后的目录中;
  4. html-webpack-plugin插件用于打包html文件。简单点说,就是原本我们在打包完js、css文件之后,还需要在html中手动引入。而该插件能帮助我们在生成css、js文件的同时将这些文件自动引入到我们的输出html文件中(一般来说,我们使用这个插件的时候,需要在配置中为它提供源模板、文件名、chunk等等,可以参考后面的配置文件代码。当然,它还有很多的参数我们这里就不介绍了,有需要的可以去webpack官网查一查该插件的相关说明和使用)

值得注意的地方,为了让打包后样式生效,有两种方法,一种是使用style-loader自动将css代码放到生成的style标签中插入到head标签里。另一种就是使用extract-text-webpack-plugin插件,将样式文件单独打包(打包输出的文件由配置文件中的output属性指定)。然后我们在入口HTML页面写个link标签引入这个打包后的样式文件

因此要将css文件和js文件打包的时候独立分开,可以使用extract-text-webpack-plugin插件
注意!!!在这里说明一点,该插件可以说是服务于webpack4之前的版本,而在webpack4+版本以后已经有mini-css-extract-plugin插件来代替它。如需了解更多提取、压缩等等的知识,请移步后续webpack学习关于提取、压缩的博客)

再注意一点,鉴于刚刚提到的webpack 4+版本问题问题影响,使用extract-text-webpack-plugin插件可能会发生版本相关问题的报错,如果还是要使用该插件,此时我们也可以运行以下命令解决:

npm install extract-text-webpack-plugin@next --save-dev

安装完成后,你会发现项目目录多了node_modules文件夹,我们安装的依赖包都在这里

六、webpack配置文件编写

本测试项目的webpack.config.js完整代码如下:

const path = require('path');
var ExtractTextPlugin = require('extract-text-webpack-plugin');  // 将css样式从js文件中分离出来
var HtmlWebpackPlugin = require('html-webpack-plugin');          // 打包html的插件

module.exports = {
    entry:  {
        bundle: __dirname + '/app/main.js'               // 入口文件
    },
    
    output: {
        path: path.resolve(__dirname, './build'),        // 打包后的文件存放的地方
        filename: "./js/[name].js"                       // 打包后输出文件的文件名
    },
    module: {
        rules: [{
            test: /\.(sa|sc|c)ss$/,
            use: [
                'style-loader', 
                'css-loader',
                'sass-loader',
            ]
        },{
            test: /\.(png|svg|jpg|gif)$/,
            use: [{
                  loader: 'file-loader',
                  options: {
                    name: '[name].[ext]',
                    outputPath: './img'
                  }
                }
              ]
        },{
            test: /\.(woff|woff2|eot|ttf|otf)$/,
            use: [{
                loader: 'file-loader',
                options: {
                    name: 'font/[name].[ext]',
                    outputPath: './fonts'
                }
            }]
        }
        ]
    },
    plugins: [
        new ExtractTextPlugin("./css/base.css"),          // 提取出来的样式放在base.css文件中
        new HtmlWebpackPlugin({                           // 用于打包html文件
            title: 'Webpack test01',                      // HTML title
            filename:'index.html',                        // 打包后的HTML文件名
            template:'public/index.html'                  // 模板路径以及文件
        }) 
    ]
}

关于webpack的配置的几个基本概念:入口entry、出口output、loader、插件plugins等等不理解的,建议去仔细阅读webpack官方文档,边看文档边做练习,相信你会有很多的收获

七、修改运行命令

我们可以在package.json的scripts中增加npm运行命令,如下:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },

这样修改之后,我们便可以在项目目录下通过运行以下命令进行打包

 npm run build

打包完成后,会根据配置中的output生成输出目录(本例中为在项目目录下输出build目录)
在这里插入图片描述
点开各个文件,可以看到熟悉的代码(鸡冻~)
其中,我们来看看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 test01</title>
<link href="./css/base.css" rel="stylesheet"></head>
<body>
    <div id="root"></div>
<script type="text/javascript" src="./js/bundle.js"></script></body>
</html>

我们可以看到,相对比之前的模板文件,该文件已经自动为我们插入编译完的js、css文件
直接用浏览器打开打包生成的html文件,结果如下:
在这里插入图片描述
可以看到,运行结果符合预期,本次学习和测试告一段落~~~

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值