• webpack高级


    copy-webpakc-plugin 拷贝 html-withimg-loader

    npm i html-withimg-loader
    

    webpack.config.js

    {
      test:/\.(html|html)$/i,
      loader:'html-withimg-loader'
    }
    

    多页应用打包

    多页应用模块化 webpack做模块化
    webpack.config.other.js

    // 遵循commonJS规范
    
    const path = require('path')
    const HtmlWebpackPlugin =  require('html-webpack-plugin')
    const {CleanWebpackPlugin} = require('clean-webpack-plugin')
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    const webpack = require('webpack')
    
    
    module.exports = {
        entry: {
            index:'./src/index.js',
            other:'./src/other.js'
        },
        output: {
            // path.resolve(): 解析当前相对路径的绝对路径
            // path.join(): 路径拼接
            // path: path.resolve('./dist/'),
            path: path.join(__dirname,'./dist/'),
            filename:'[name].js'
        },
        mode: 'development',
        devServer: {
            open: true,
            hot: true,
            compress: true,
            port: 3000,
            static: './src'
        },
        plugins:[
            // devserver时,index.html 放服务器根目录下
            // devserver时,index.html 自动引入bundle.js
            // 打包时放到dist目录下
            new HtmlWebpackPlugin({
                filename:'index.html',
                template: './src/index.html',
                chunks: ['index']
            }),
            new HtmlWebpackPlugin({
                filename:'other.html',
                template: './src/other.html',
                chunks: ['other']
            }),
            new CleanWebpackPlugin(),
            new CopyWebpackPlugin(
            {patterns: [
                {
                    // __dirname 根目录
                    from: path.join(__dirname,'assets'),
                    to:'assets'
                }
            ]}),
            new webpack.BannerPlugin('版权信息')
        ],
        module: {
            rules: [
                {
                    // \转义 $以结尾
                    test: /\.css$/,
                    // css-loader 解析css文件 style-loader 放到html中
                    use:['style-loader','css-loader']
                },
                {
                    test: /\.less$/,use:['style-loader','css-loader','less-loader']
                },
                {
                    test:/\.js$/,
                    use:{
                        loader: 'babel-loader'
                        // options: {
                        //     // 预设
                        //     presets:['@bable/env'],
                        //     // 高级
                        //     plugins:['@babel/plugin-proposal-class-properties']
                        // }
                    }
                }
            ]
        },
        devtool:'eval-cheap-module-source-map'
    }
    

    引入第三方库

    expose-loader 将库引入到全局作用域(在当前作用域找不到,就会去全局作用域找)

    npm i expose-loader -D
    

    webpack.config.js

    {
        // 用于解析jQuery的绝对路径
        test: require.resolve('jquery'),
        use: {
            loader: 'expose-loader',
            options: '$'
        }
    }
    

    自动加载到每个模块

    new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery'
    })
    

    区分环境配置文件

    webpack-merge 把自己的配置与base的配置进行合并后导出

    • webpack.base.js 公用配置
    • webpack.prod.js 生产环境
    • webpack.dev.js 测试环境
    npm i webpack-merge -D
    

    webpack.base.js

    // 遵循commonJS规范
    // path 用于拼接绝对路径
    const path = require('path')
    const HtmlWebpackPlugin =  require('html-webpack-plugin')
    const {CleanWebpackPlugin} = require('clean-webpack-plugin')
    const CopyWebpackPlugin = require('copy-webpack-plugin')
    const webpack = require('webpack')
    
    module.exports = {
        entry: {
            index:'./src/index.js',
            other:'./src/other.js'
        },
        output: {
            // path.resolve(): 解析当前相对路径的绝对路径
            // path.join(): 路径拼接
            // path: path.resolve('./dist/'),
            // 绝对路径:__dirname 当前目录 '..'上一层目录
            // 相对路径: 相对项目跟目录
            path: path.join(__dirname,'..','./dist/'),
            filename:'[name].js',
            publicPath:'/'
        },
        plugins:[
            // devserver时,index.html 放服务器根目录下
            // devserver时,index.html 自动引入bundle.js
            // 打包时放到dist目录下
            new HtmlWebpackPlugin({
                filename:'index.html',
                template: './src/index.html',
                chunks: ['index']
            }),
            new HtmlWebpackPlugin({
                filename:'other.html',
                template: './src/other.html',
                chunks: ['other']
            }),
            // dist目录清空
            new CleanWebpackPlugin(),
            // 拷贝到dist目录
            new CopyWebpackPlugin(
            {patterns: [
                {
                    // __dirname 根目录
                    from: path.join(__dirname,'..','assets'),
                    to:'assets'
                }
            ]}),
            new webpack.BannerPlugin('版权信息--'),
            new webpack.ProvidePlugin({
                $: 'jquery',
                jQuery: 'jquery'
            })
        ],
        module: {
            rules: [
                {
                    // \转义 $以结尾
                    test: /\.css$/,
                    // css-loader 解析css文件 style-loader 放到html中
                    use:['style-loader','css-loader']
                },
                {
                    test: /\.less$/,use:['style-loader','css-loader','less-loader']
                },
                {
                    test:/\.js$/,
                    use:{
                        loader: 'babel-loader'
                        // options: {
                        //     // 预设
                        //     presets:['@bable/env'],
                        //     // 高级
                        //     plugins:['@babel/plugin-proposal-class-properties']
                        // }
                    }
                },
                {
                    // 用于解析jQuery的绝对路径
                    test: require.resolve('jquery'),
                    use: {
                        loader: 'expose-loader',
                        options: '$'
                    }
                }
            ]
        }
    }
    

    webpack.dev.js

    const {merge} = require('webpack-merge')
    const baseConfig = require('./webpack.base')
    // 遵循commonJS规范
    module.exports = merge(baseConfig, {
        mode: 'development',
        devServer: {
            open: true,
            hot: true,
            compress: true,
            port: 3000,
            static: './src'
        },
        devtool:'eval-cheap-module-source-map'
    })
    

    webpack.prod.js

    const {merge} = require('webpack-merge')
    const baseConfig = require('./webpack.base')
    // 遵循commonJS规范
    module.exports = merge(baseConfig, {
        mode: 'development',
        devServer: {
            open: true,
            hot: true,
            compress: true,
            port: 3000,
            static: './src'
        },
        devtool:'eval-cheap-module-source-map'
    })
    

    packge.json --config指定路径 默认 webpack.config.js

    "scripts": {
            "build": "webpack --config ./build/webpack.prod.js",
            "dev": "webpack --config ./build/webpack.dev.js"
    }
    

    配置文件

    解决devServer跨域问题 同源策略是浏览器的策略 不影响服务器请求数据

    • jsonp(淘汰 script标签请求json脚本,回调处理数据)
    • cors(跨-域-资源-共享,数据接口服务器告诉浏览器信任客户端,nginx添加响应头信息)
    • http proxy(开发阶段:用http代理)

    webpack.dev.js

    // 遵循commonJS规范
    
    const {merge} = require('webpack-merge')
    const baseConfig = require('./webpack.base')
    const webpack = require('webpack')
    
    module.exports = merge(baseConfig, {
        mode: 'development',
        devServer: {
            open: true,
            hot: true,
            compress: true,
            port: 3000,
            proxy: {
                // 当前段请求 /api 地址时,会将请求转发到
                // 当请求/api/getUserInfo ,此时会转发到http://localhost:9999/api/getUserInfo
                // '/api':'http://localhost:9999'
                '/api':{
                    target:'http://localhost:9999',
                    // 重写 转发时请求不携带 /api
                    pathRewrite: {
                        '^/api':''
                    }
                }
            }
        },
        devtool:'eval-cheap-module-source-map',
        plugins: [
            new webpack.DefinePlugin({
                IS_DEV: 'true'
            })
        ]
    })
    
  • 相关阅读:
    C # 编码 习惯[转载]
    SilverLight 学习笔记 (一) 画刷:Brush
    55条SEO必备技巧
    c# 不安全代码之指针
    VMare 硬盘扩展和压缩、网络配置
    Win7 防护墙设置——Ping命令,Http访问
    Vs2010 sp1补丁太让人纠结
    不可小瞧的GetHashCode函数
    .NET中颜色的转换方法总结
    VS2010 如何制作项目模板
  • 原文地址:https://www.cnblogs.com/tutumissed/p/16139872.html
Copyright © 2020-2023  润新知