webpack整理

const {resolve}=require("path");
/* 
    htmlWebpackPlugin
    主要作用:为应用程序生成一个html,也就是打包后的html,并自动将所有的bundle注入到html中
*/
let htmlWebpackPlugin = require('html-webpack-plugin');  // 通过 npm 安装

//关于resolve的__dirname
console.log(resolve(__dirname,"./src/main.js"));  //D:\frame\webpack\src\main.js
console.log(resolve("./src/main.js"));  //D:\frame\webpack\src\main.js
console.log(resolve(__dirname)); //D:\frame\webpack
console.log(resolve()); //D:\frame\webpack

module.exports={
    entry:resolve(__dirname,"./src/index.js"),   //项目的入口文件,默认是./src/index.js
    output:{
        filename:"[name].js",//输出文件的名字,name对应的是entry中的 "index.js"的,这儿生成后是index.js,也可以不用name,用bundle.js
        path:__dirname+"/dist"     //出口文件所在目录,也就是打包后的整体目录
    },  //项目的出口文件
     
    // externals表示打包的时候要忽略的文件,因为采用了cdn
    //  externals:{
    //     echarts: 'echarts',
    //     moment: 'moment',
    //     vant: 'vant',
    // },   

    //loader
    /*
        这里因为创建了webpack.config.js,所以使用配置方式,
        test 属性,识别出哪些文件会被转换。
        use 属性,定义出在进行转换时,应该使用哪个 loader。
        tip:loader是从右到左(或从下到上)地取值
    */
    module:{
        /*
            rules说明:
            告诉webpack 编译器,当碰到".css"时,在对它打包之前,先 use(使用) css-loader 转换一下。
        */
        //常用loader
        rules:[
            { 
                test: /\.css$/, 
                use: 'css-loader',  //npm install --save-dev css-loader
                // 当只有一个loader的时候可以不适用use,直接使用loader
                //loader: 'css-loader',
            },
            { 
                test: /\.ts$/, 
                use: 'ts-loader'  //npm install --save-dev css-loader
            },
            {
                test:/\.(sass|scss)$/,
                use:['style-loader','css-loader','sass-loader']
             },
             {
                test:/\.less$/,
                use:['style-loader','css-loader','less-loader']
             },
             {
                /*
                  处理不了html中的img图片 需要用html-loader
                */
                test: /\.(jpg|png|gif)$/,
                // 使用一个loader  url-loader依赖file-loader
                loader: 'url-loader',
                options: {
                  /*
                    图片小于12kb,会被base64处理
                    优点:减少请求数量(减轻服务器压力)
                    缺点:图片体积会更大(文件请求速度更慢)
                  */
                  limit: 12 * 1024,
                  /*
                    问题:url-loader默认使用es6模块化解析,而html-withimg引入图片是common.js
                    解析时会出现问题:[object Module]
                    解决:关闭url-loader的es6模块化,使用common.js解析
                  */
                  esModule: false,
                  name: 'images/[hash:8][name].[ext]',
                },
              },
        ],
    },

     /*
        1.ProgressPlugin用于自定义编译过程中的进度报告
        2.HtmlWebpackPlugin的作用:
        会自动帮你生成一个html 件,并且引用相关的assets文件(如 css, js)。
    */
    plugins:[
        new webpack.ProgressPlugin(),
        new HtmlWebpackPlugin({ 
            template: './src/index.html',
            minify: {
                // 移除空格
                collapseWhitespace: true,
                // 移除注释
                removeComments: true,
                },
        }),
    ],//里面传入的必须是new 实例
    
    devServer: {
        // 只会在内存中编译打包,不会有任何输出文件,终止运行会删除内存
        // 开发时可直接访问到 ./build 下的静态资源,这些资源在开发中不必打包
        // 运行代码的目录
        contentBase: resolve(__dirname, 'build'),
        // 监视 contentBase 目录下的所有文件,一旦文件变化就会 reload
        watchContentBase: true,
        watchOptions: {
          // 忽略文件
          ignored: /node_modules/,
        },
        compress: true, // 启动gzip压缩
        port: 5000,   // 端口号
        host: 'localhost', // 域名
        open: true,// 自动打开浏览器
        hot: true,// 开启HMR功能
        clientLogLevel: 'none', // 不要显示启动服务器日志信息
        quiet: true,// 除了一些基本启动信息以外,其他内容都不要显示
        overlay: false, // 如果出错了,不要全屏提示~
        // 服务器代理 --> 解决开发环境跨域问题
        proxy: {
          // 一旦devServer(5000)服务器接受到 /api/xxx 的请求,就会把请求转发到另外一个服务器(3000)
          '/api': {
            target: 'http://localhost:3000',
            // 发送请求时,请求路径重写:将 /api/xxx --> /xxx (去掉/api)
            pathRewrite: {
              '^/api': '',
            },
          },
        }
    },
    
    mode: 'development', // 开发模式,生产,测试
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • webpack就是一个前端打包工具,将require.js的东西、组件化的思想,转化成浏览器能够浏览的语言。
    一个废人阅读 158评论 0 0
  • 【翻译】Webpack——令人困惑的地方 webpack2 终极优化 Webpack 2 入门教程 webpack...
    橡树上阅读 198评论 0 0
  • 本篇文章基于webpack官网对webpack的基本概念进行的总结。 主要基于 , , , , 几方面阐述,本篇...
    不忘初心_6b23阅读 214评论 0 1
  • 现状:前端开发是基于多语言、多层次的编码和组织工作,前端产品的交付是基于浏览器,这些资源是通过增量加载的方式运行到...
    埃米莉Emily阅读 228评论 0 0
  • 背景:大约从9月12日开始面试,到现在为止大约面了30余家公司,大厂小厂都有,岗位级别覆盖中级和高级前端,可以很明...
    悠哈糖阅读 545评论 0 0