zoukankan      html  css  js  c++  java
  • Webpack 的核心概念

    看完这篇还搞不懂webpack,求你打我 - 简书 (jianshu.com)

    1,静态资源打包

    file-loader

    npm install --save-dev file-loader
    module.exports = {
      module: {
        rules: [
          {
            test: /.(png|jpg|gif)$/,
            use: [
              {
                loader: 'file-loader',
                options: {
              name:'[path]_[name]_[hash].[ext]',//为你的文件配置自定义文件名模板
              publicPath:'images/'//为你的文件配置自定义 public 发布目录 
    outputPath:'images/'//为你的文件配置自定义 output 输出目录
        }
              }
            ]
          }
        ]
      }
    }

    url-loader

    npm install --save-dev url-loader
    
    module.exports = {
      module: {
        rules: [
          {
            test: /.(png|jpg|gif)$/,
            use: [
              {
                loader: 'url-loader',
                options: {
                  limit: 8192 //设置文件大小
                }
              }
            ]
          }
        ]
      }
    }

    style-loader

    npm install style-loader --save-dev
    npm install sass-loader node-sass --save-dev
    npm i -D postcss-loader
    
    {
      module: {
        rules: [
          {
            test: /.css$/,
            use: [
              { loader: "style-loader" },// 将 JS 字符串生成为 style 节点
              { loader: "css-loader"
          options:{
            importLoader:2;//因为下面有sass-loader和postcss-loader,所以代码编译的时候是从上到下从右到左开始编译
            modules:true //是否启用css模块规范
            }
          },// 将 CSS 转化成 CommonJS 模块 { loader: "sass-loader" },// 将 Sass 编译成 CSS { loader: "postcss-loader" },//责进一步处理 CSS 文件,比如添加浏览器前缀,压缩 CSS ] } ] } }

    webpack中如何使用iconfont字体图标

    打开iconfont.css文件,原本的字体文件引用路径是用的css的方式,即下面图片中所示的

    • 同级目录:直接用文件名
    • 上一级目录:../

    但是,我们是在webpack环境下使用,所以要改成webpack引用规则,即改成下面图片所示

    • 同级目录: ./
    • 上一级目录: ../

    2.配置如何加载woff等字体文件

    大家都知道webpack要配置loader,声明如何加载某类文件,所以我们要在config中声明一下

    使用之前要安装url-loader、file-loader

    在webpack的配置文件的loaders中配置

     字体文件最后会以字符的形式保存在css文件中 

     plugins插件

    npm install --save-dev html-webpack-plugin   //会在打包结束后自动生成一个HTML文件,并把打包生成的js文件自动引入到这个HTML文件中
    npm install --save-dev clean-webpack-plugin  //清除上一次打包的文件
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var path = require('path'); module.exports = { entry: 'index.js', output: { path: path.resolve(__dirname, './dist'), filename: 'index_bundle.js' }, plugins: [new HtmlWebpackPlugin(
      template:'src/index.html
    ),new CleanWebpackPlugin(['dist'])]}

    entry output 入口出口文件

    const path = require('path')
    ...
    
    module.exports = {
     mode: 'production',
    //1.增加映射文件,可以帮我们调试源代码
        devtool:'source-map'
     
    //2.不会产生单独的文件,但是可以显示行和列
        devtool: 'eval-source-map'
    //3.不会产生列,但是是一个单独的映射文件,产生后可以保留起来,便于调试
        devtool: 'cheap-module-source-map'  //用的不是很多
    //不会产生文件,而是集成在打包后的文件中,不会产生列
        devtool:'cheap-module-eval-source-map'
     
    entry: { "app.bundle": './src',
      main:./src/index.js'//这个是默认的出口文件
    }, output: { path: path.resolve(__dirname, 'dist'),
    publicPath: 'https://cdn.example.com/assets/[fullhash]/'//这个是打包后的cdn配置 
    filename: '[name].[chunkhash].js' }, ... };

    webpack-dev-server

    webpack-dev-middleware

    webpack-dev-middleware 是一个封装器(wrapper),它可以把 webpack 处理过的文件发送到一个 server。 webpack-dev-server 在内部使用了它,然而它也可以作为一个单独的 package 来使用,以便根据需求进行更多自定义设置。下面是一个 webpack-dev-middleware 配合 express server 的示例。

    HotModuleReplacementPlugin  热更新

    webpack里使用babel

    // 已经在项目里安装了webpack的情况下
    npm install --save-dev babel-loader babel-core babel-preset-env

    transform-runtime解决代码重复问题

    ①在打包的过程中,babel会在包里提供一些工具函数,而这些工具函数可能会重复的出现在多个模块。

    ②这样会导致打包的体积过大,所以babel提供了babel-transform-runtime解决这个体积过大的问题

    ③安装依赖

    npm install babel-plugin-transform-runtime --save-dev
    npm install babel-runtime --save
    // 该文件其实最终是要在node环境下执行的
    const path = require('path')
    const htmlWebpackPlugin = require('html-webpack-plugin')
    
    // 导出一个具有特殊属性配置的对象
    module.exports = {
        entry:['babel-polyfill','./src/main.js'],/* 入口文件模块路径 */
        output:{
            path:path.join(__dirname,'./dist/'),/* 出口文件模块所属目录,必须是一个绝对路径 */
            filename:'bundle.js'/* 打包的结果文件名称 */
        },
        devServer:{
            // 配置webpack-dev-server的www目录
            contentBase:'./dist'
        },
        plugins:[
            // 该插件可以把index.html打包到bundle.js文件所属目录,跟着bundle走
            // 同时也会自动在index.html中注入script引用链接,并且引用的资源名称,也取决于打包的文件名称
            new htmlWebpackPlugin({
                template:'./index.html'
            })
        ],
        module:{
            rules:[
                {
                    test:/.css$/,
                    use:[
                        //注意:这里的顺序很重要,不要乱了顺序
                        'style-loader',
                        'css-loader'
                    ]
                },
                {
                    test:/.(jpg|png|gif|svg)$/,
                    use:[
                        'file-loader'
                    ]
                },
                {
                    test:/.js$/,
                    exclude:/(node_modules|bower_components)/,//排除掉node_module目录
                    use:{
                        loader:'babel-loader',
                        options:{
                            cacheDriectory:true,//配置cacheDirectory可以节省webpack打包编译时间,默认把打包的结果缓存到node_modules/.cache模块下
                            presets:['env'], //转码规则
                            plugins:['transform-runtime']
                        }
                    }
                }
            ]
        }
    }
  • 相关阅读:
    Django Ajax知识
    Django走过的坑
    Django-8 聚合查询与分组查询
    Django-7 ORM多表操作
    Django-6 Django ORM层
    Django-5 模板层
    docker 常用批量操作
    K8S 从私有仓库拉取镜像
    linux制作iso文件
    二进制安装docker
  • 原文地址:https://www.cnblogs.com/webljl/p/14029045.html
Copyright © 2011-2022 走看看