• webpack使用2-常用的几个loader的使用


    webpack官方提供了非常多的loader,每个都记住不太容易,可以去 官方中文网站:https://www.webpackjs.com/,去查阅一些loader的使用方法。下面就挑选几个常用的loader做讲解使用[大前提就是npm 先安装对应的loader]。

    使用file-loader:

    -----《App.vue》-------
    <template>
        <div>
            <p>this vue app</p>
            <img :src="'./dist/'+img" alt="hh">
        </div>
    </template>
    <script>
    import img from './static/images/cat.jpeg' //导入一张图片,入口文件使用了这个App.vue,解析到App组件中用了图片资源,那么webpack就会去配置文件中找是否有对该类型文件做打包处理。有就打包,没有就报错
    export default {
        name:'App',
        img:'',
        created(){
            this.img = img;
            console.log(this.img)
        }
    }
    </script>
    <style scoped>
    
    </style>

    webpack.config.js配置文件

    const path = require('path')
    
    const VueLoaderPlugin = require('vue-loader/lib/plugin')
        //官网除了表示配置打包规则rules,还要实例化一个vueloader插件
    
    module.exports = { //导出一个对象
        mode: 'development',
        entry: './src/main.js', //打包入口
        /*打包出口,一个对象,指定
        filename:打包后的js名
        path,打包后的路径
        */
        output: {
            filename: 'bundle.js',
            path: path.resolve(__dirname, 'dist')
                /*由于这里需要绝对路径,需要用到nodejs种的path模块
                __dirname 表示当前文件夹的绝对路径,
                这里表示在项目跟目录下新建dist文件作为打包后存放路径
                */
        }, //到这里就是webpack最基本的配置,没有用到各种处理器处理js,css,img等资源
        module: {
            rules: [{
                test: /.vue$/, // 正则表示匹配.vue结尾的文件
                loader: 'vue-loader',
            }, { //配置文件loader,用于打包图片资源,默认打包生产的文件命名是 hash字符串命名的,可以在选项中配置打包后的文件名
                test: /.(jpg|jpeg|png|gif)$/,
                loader: 'file-loader',
             options: {//配置 选项
                    name: '[name].[ext]' //这里可以查阅webpackjs.com 查看file-loader的配置选项
                        //这里表示使用原文件名加原扩展进行打包生产文件到指定目录下!!!
                }
    
            }]
        },
        plugins: [
            new VueLoaderPlugin(), //vue插件实例
        ],
        resolve: { //表示一些解决方案
            alias: { //别名
                'vue': 'vue/dist/vue.js', //这里表示导入vue时,导入此处指定路径下的文件
            }
        }
    }

     使用 url-loader:

       url-loader是基于file-loader的,所以使用url-loader的前提就是安装file-loader,区别在于:url-loader可以不必一定生成新文件,url可以配置limit选项,表示小鱼这个limit规定的byte的文件直接使用base64编码打包在js中,而不时单独生成一个文件。

      

     1 const path = require('path')
     2 
     3 const VueLoaderPlugin = require('vue-loader/lib/plugin')
     4     //官网除了表示配置打包规则rules,还要实例化一个vueloader插件
     5 
     6 module.exports = { //导出一个对象
     7     mode: 'development',
     8     entry: './src/main.js', //打包入口
     9     /*打包出口,一个对象,指定
    10     filename:打包后的js名
    11     path,打包后的路径
    12     */
    13     output: {
    14         filename: 'bundle.js',
    15         path: path.resolve(__dirname, 'dist')
    16             /*由于这里需要绝对路径,需要用到nodejs种的path模块
    17             __dirname 表示当前文件夹的绝对路径,
    18             这里表示在项目跟目录下新建dist文件作为打包后存放路径
    19             */
    20     }, //到这里就是webpack最基本的配置,没有用到各种处理器处理js,css,img等资源
    21     module: {
    22         rules: [{
    23                 test: /.vue$/, // 正则表示匹配.vue结尾的文件
    24                 loader: 'vue-loader',
    25             },
    26             {
    27                 test: /.(jpg|jpeg|png|gif)$/,
    28                 // loader: 'file-loader',
    29                 loader: 'url-loader',
    30                 options: {
    31                     limit: 2048, //表示小鱼2048bytes的文件使用base64直接打包到js中
    32                     name: '[name].[ext]' //这里可以查阅webpackjs.com 查看file-loader的配置选项
    33                         //这里表示使用原文件名加原扩展进行打包生产文件到指定目录下!!!
    34                 }
    35             },
    36         ]
    37     },
    38     plugins: [
    39         new VueLoaderPlugin(), //vue插件实例
    40     ],
    41     resolve: { //表示一些解决方案
    42         alias: { //别名
    43             'vue': 'vue/dist/vue.js', //这里表示导入vue时,导入此处指定路径下的文件
    44         }
    45     }
    46 }
    View Code

     使用 css-loader:

      打包css样式需要用到css-loader【解析css文件【包括css之间的依赖的解析,处理到一个css对象中】,并导出这个css对象 】& style-loader【将css-loader解析完成并返回的css代码渲染到dom中】! 【官网api:https://www.webpackjs.com/loaders/】

    App.vue中导入css样式
        import './static/css/test.css'

      webpack打包碰到.css文件就去配置文件中找打包规则,是否设置打包css文件。

      

     1 const path = require('path')
     2 
     3 const VueLoaderPlugin = require('vue-loader/lib/plugin')
     4     //官网除了表示配置打包规则rules,还要实例化一个vueloader插件
     5 
     6 module.exports = { //导出一个对象
     7     mode: 'development',
     8     entry: './src/main.js', //打包入口
     9     /*打包出口,一个对象,指定
    10     filename:打包后的js名
    11     path,打包后的路径
    12     */
    13     output: {
    14         filename: 'bundle.js',
    15         path: path.resolve(__dirname, 'dist')
    16             /*由于这里需要绝对路径,需要用到nodejs种的path模块
    17             __dirname 表示当前文件夹的绝对路径,
    18             这里表示在项目跟目录下新建dist文件作为打包后存放路径
    19             */
    20     }, //到这里就是webpack最基本的配置,没有用到各种处理器处理js,css,img等资源
    21     module: {
    22         rules: [{
    23                 test: /.vue$/, // 正则表示匹配.vue结尾的文件
    24                 loader: 'vue-loader',
    25             },
    26             {
    27                 test: /.(jpg|jpeg|png|gif)$/,
    28                 // loader: 'file-loader',
    29                 loader: 'url-loader',
    30                 options: {
    31                     limit: 2048, //表示小鱼2048bytes的文件使用base64直接打包到js中
    32                     name: '[name].[ext]' //这里可以查阅webpackjs.com 查看file-loader的配置选项
    33                         //这里表示使用原文件名加原扩展进行打包生产文件到指定目录下!!!
    34                 }
    35             },
    36             { //打包css规则
    37                 test: /.css$/,
    38                 use: ['style-loader', 'css-loader'], //使用多个loader语法,use+数组,数组里面传入多个loader 的name,并且webpack使用数组里的loader,顺序是从右往左,从下往上去依次加载并使用这些loader
    39             },
    40         ]
    41     },
    42     plugins: [
    43         new VueLoaderPlugin(), //vue插件实例
    44     ],
    45     resolve: { //表示一些解决方案
    46         alias: { //别名
    47             'vue': 'vue/dist/vue.js', //这里表示导入vue时,导入此处指定路径下的文件
    48         }
    49     }
    50 }
    View Code

    使用 stylus-loader:

      stylus是目前Vue开发中被广泛使用的css预处理器【css 框架】【因为Stylus是来源于Node.js社区,与js关系密切】,所以打包stylus文件也是用的比较多的地方。

      编写stylus:

    body
        background:#fff url(../images/cat.jpeg) no-repeat fixed center center/ cover
        //表示给body加上cat.jpeg这个背景,不重复,并且铺满整个viewport【background-size:cover】,center center/ cover 这里简写一定要用/ 隔开 background-position和background-size!!!

     配置打包规则:

      

     1 const path = require('path')
     2 
     3 const VueLoaderPlugin = require('vue-loader/lib/plugin')
     4     //官网除了表示配置打包规则rules,还要实例化一个vueloader插件
     5 
     6 module.exports = { //导出一个对象
     7     mode: 'development',
     8     entry: './src/main.js', //打包入口
     9     /*打包出口,一个对象,指定
    10     filename:打包后的js名
    11     path,打包后的路径
    12     */
    13     output: {
    14         filename: 'bundle.js',
    15         path: path.resolve(__dirname, 'dist')
    16             /*由于这里需要绝对路径,需要用到nodejs种的path模块
    17             __dirname 表示当前文件夹的绝对路径,
    18             这里表示在项目跟目录下新建dist文件作为打包后存放路径
    19             */
    20     }, //到这里就是webpack最基本的配置,没有用到各种处理器处理js,css,img等资源
    21     module: {
    22         rules: [{
    23                 test: /.vue$/, // 正则表示匹配.vue结尾的文件
    24                 loader: 'vue-loader',
    25             },
    26             {
    27                 test: /.(jpg|jpeg|png|gif)$/,
    28                 // loader: 'file-loader',
    29                 loader: 'url-loader',
    30                 options: {
    31                     limit: 2048, //表示小鱼2048bytes的文件使用base64直接打包到js中
    32                     name: '[name].[ext]' //这里可以查阅webpackjs.com 查看file-loader的配置选项
    33                         //这里表示使用原文件名加原扩展进行打包生产文件到指定目录下!!!
    34                 }
    35             },
    36             {
    37                 test: /.css$/,
    38                 use: ['style-loader', 'css-loader'], //使用多个loader语法,use+数组,数组里面传入多个loader 的name,并且webpack使用数组里的loader,顺序是从右往左,从下往上去依次加载并使用这些loader
    39             },
    40             { //配置stylusl-oader
    41                 test: /.styl(us)?$/,
    42                 use: ['style-loader', 'css-loader', 'stylus-loader'],
    43             },
    44         ]
    45     },
    46     plugins: [
    47         new VueLoaderPlugin(), //vue插件实例
    48     ],
    49     resolve: { //表示一些解决方案
    50         alias: { //别名
    51             'vue': 'vue/dist/vue.js', //这里表示导入vue时,导入此处指定路径下的文件
    52         }
    53     }
    54 }
    View Code

    app.vue组件中引入stylus:

      

    import './static/css/test.styl'

      执行打包命令,打开放置app.vue的html,发现stylus中的css样式被插入到 <style>中!

      这里碰到两个问题:
      1.默认不带版本号安装的 stylus-loader打包stylus报错,百度说是版本太高,uninstall原来的版本,npm stylus时 带上3.0.2版本号,后执行打包命令=》 success!
      2.background-image/size/position/color/attachment/repeat 等属性简写问题:既要注意顺序                        【https://blog.csdn.net/weixin_39256994/article/details/78762714】,background-position和background-size ,之间还要用  /  隔开
  • 相关阅读:
    python 类和实例
    python 装饰器
    *args和**kwargs:
    定义函数
    python 调用函数
    python lambda表达式
    java-commons-HttpClient超时设置setConnectionTimeout和setSoTimeout
    python 获取响应头
    Freesshd Permission denied (publickey).
    update 嵌套优化
  • 原文地址:https://www.cnblogs.com/Hijacku/p/14744474.html
Copyright © 2020-2023  润新知