zoukankan      html  css  js  c++  java
  • webpack打包样式资源(三)

    本篇文章主要讲述webpack.config.js的自定义配置以及对样式资源打包的处理。

    首先还是创建2个文件夹src和build参考之前所说webpack打包(二)

    接下来主要说一下webpack.config.js这个文件的作用以及loader的用法(打包css、less)。

    在src的同级目录中创建一个文件叫做webpack.config.js。

    webpack.config.js的作用:指示webpack做哪些事情。一旦运行了webpack就会加载其中的配置。

    所有的构建工具都是基于node.js运行,而模块化采用的是common.js。项目用的是es6,配置用的是common.js。

    第一步用common.js语法暴露webpack的相关配置(五个核心)。

     1 module.exports = {
     2     entry: '',
     3     output: {
     4         filename: '',
     5         path: '',
     6     },
     7     module: {
     8         rules: [
     9             {
    10                 test: / /,
    11                 use: [
    12 
    13                 ]
    14             }
    15         ]
    16     },
    17     plugins: [
    18     ],
    19     mode: '',
    20 }

    entry:指示从那个文件开始打包。

    output:打包到哪里去。

    filename:文件打包成功后的名字。

    path:文件打包后的路径(一般用绝对路径)。

    module:loader的相关配置。

    rules:运行webpack成功后会进入rules寻找loader规则。多个规则则创建多个对象。

    test:类似js的正则表达式的匹配,用来匹配某个后缀名的文件,然后对其进行解析。

    use:指定使用哪些loader对其进行解析,这里注意一点,use是一个数组,对于其中的属性解析的时候,执行顺序是从右往左,从下往上进行依次执行。也就是说从末尾开始执行解析。

    plugins:对复杂业务的处理。

    mode:指定以哪种模式打包。值为development/production。

    好弄清这些属性的意思我们再来写其中的内容。假设我们现在要打包一个css文件,上篇内容已经测试过常规方法是不能够打包css文件的会报错。

    /**
     * webpack 配置文件
     * 作用:指示webpack干那些活(当你运行webpack的时候会加载其中的配置)
     * 
     * 所有的构建工具都是基于node.js运行~模块化采用common.js。项目用的是es6,而配置用的是common.js。
     */
    
    //nodejs语法:resolve用来拼接绝对路径的方法
    const { resolve } = require('path');
    
    //暴露对象 写webpack相关配置(五个核心配置)
    module.exports = {
        //入口起点
        entry: './src/index.js',
        output: {
            //输出文件名
            filename: 'built.js',
            //路径
            //__dirname nodejs的变量,代表当前文件的目录的绝对路径
            path: resolve(__dirname, 'build')
        },
        // loader的配置(翻译)
        module: {
            rules: [
                //详细loader
    
                {
                //正则匹配符合后缀的文件遍历rules一旦发现以css结尾的文件进行处理
                    test: /.css$/,
                    //使用哪些loader
                    use: [
                        //use中的lodaer执行顺序是从右到左(从下到上)依次执行
                        //创建一个style标签,将js中的css样式资源插入进去,添加到页面中的head生效。
                        'style-loader',
                        //将css文件以字符串的形式变成commonjs的一个模块加载到js中,里面的内容是样式字符串。
                        'css-loader'
                    ]
                }
            ]
        },
        //plugins的配置
        plugins: [
            //详细plugins的配置
        ],
        //模式(两个值不能同时写)
        mode: 'development',    //开发模式
        //mode: 'production'    //生产模式
    }

    这里需要注意的一点是,在写路径的时候我们用到了一个新的属性resolve,以及__dirname。

    那这样我们就可以很好理解为从src下面的index.js文件开始打包,输出到build文件下的built.js。

    这里为了方便以后的使用,我们将包的管理都安装在外面。在最外面安装style-loader和css-loader。  --npm i style-loader css-loader -D

    style-loader:创建style标签,将js中的css样式插入到style标签里。

    css-loader:将css文件以字符串的形式变成commonjs的一个模块加载到js中,里面的内容是样式字符串。

    安装成功后我们来创建一个css文件输入任意样式看看html文件有没有根据样式进行改变。在src文件夹中创建2个文件分别是index.js和index.css。代码如下:

    index.css

    1 html body{
    2     height: 100%;
    3     background-color: pink;
    4 }

    index.js

    1 import './index.css'

    直接输入webpack命令打包。可以看到打包成功的界面。

     而且build文件夹中也多了一个built.js文件。然后我们在该文件夹中创建一个html文件引入这个js文件看一下是否能够改变html的颜色。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>webpack</title>
     8 </head>
     9 
    10 <body>
    11     <script src="./built.js"></script>
    12     <h1>hello webpack</h1>
    13 </body>
    14 
    15 </html>

    运行后的页面:

     嗯没错变成了粉色。然后按F12看一看样式是如何加入的。

    可以看到是创建一个style标签插入到head中。

    接下来我们引入一个less文件试一下。新建一个less文件代码如下:

    1 h1 {
    2     color: #ffffff;
    3 }

    在rules中新加如一个匹配less后缀的规则以及loader:

    1 {
    2     test: /.less$/,
    3     use: [
    4         'style-loader',
    5         'css-loader',
    6         'less-loader'
    7     ]
    8 }

    less-loader:将less文件编译成css文件。

    在index.js中引入less文件

    1 import './index.css'
    2 import './index.less'

    继续外部引入包 less-loader,这里注意一下还要引入一个less的包。--npm i less less-loader -D

    然后输入webpack打包。

    进入页面刷新。可以看到结果:

     字体变成白色的了。然后F12看一下如何编译less的:

     也是插入style标签转成了css文件输出。

    以上就是关于自定义配置以及css打包的内容。

  • 相关阅读:
    CSS3实现轮播切换效果
    angularjs directive
    angularjs 迭代器
    anjularjs 路由
    sublime text3 快捷键设置
    如何使用git 跟进项目进程
    hdu 4842(NOIP 2005 过河)之 动态规划(距离压缩)
    叠箱子问题 之 动态规划
    华为oj 之 蜂窝小区最短距离
    华为oj 之 整数分隔
  • 原文地址:https://www.cnblogs.com/pipim/p/13863415.html
Copyright © 2011-2022 走看看