【学习日记】webpack配置文件分析(dev)2020-8-15

1、webpack.base.conf.js

基础的webpack配置文件,配置一些dev和prod模式共有的属性。

2、webpack.dev.conf.js

配置一些dev模式特有的属性,使用webpack-merge与webpack.base.conf.js里的配置合并

3、整合后的dev模式配置文件:

3.1、entry:

//webpack.base.conf.js中
entry: {
        app: './src/main.js'
    },
    
//webpack.dev.conf.js中,对入口文件的js加上dev-client里的内容,一起打包实现热更新
Object.keys(baseWebpackConfig.entry).forEach(function(name) {
    baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
})

//其中dev-client.js如下,作用是集成到客户端js中,作为socket客户端js,响应到服务器通知,刷新页面
require('eventsource-polyfill')
var hotClient = require('webpack-hot-middleware/client?path=http://localhost:8003/#/home/__webpack_hmr&noInfo=true&reload=true')

hotClient.subscribe(function(event) {
	if (event.action === 'reload') {
		window.location.reload()
	}
})

!!注意!!
如果dev-client里path的路径不全,可能出现:

dev-client.js中path不全出现的问题
所以需要写全path的路径:path=http://localhost:8003/#/home/__webpack_hmr

var hotClient = require('webpack-hot-middleware/client?path=http://localhost:8003/#/home/__webpack_hmr&noInfo=true&reload=true')

3.2、output

output: {
        path: config.build.assetsRoot,
        publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,//资源的发布地址
        filename: '[name].js'
    },

path和publicPath的区别

path:使用webpack命令的打包输出路径,会显示在项目目录里,如果内容修改需要手动重新npx webpack。
publicPath:使用webpack-dev-server命令的打包输出路径,在内存中,不会显示在项目目录里,启动一个web服务,通过websocket实现实时编译。

3.3、loader

loaders: [
     { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // 处理 CSS 文件的 loader
     { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, // 处理 less 文件的 loader
     { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }, // 处理 scss 文件的 loader
    { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=7631&name=[hash:8]-[name].[ext]' }, // 处理图片路径的 loader,limit 给定的值,是图片的大小,单位是 byte, 如果我们引用的图片,大于或等于给定的limit值,则不会被转为base64格式的字符串, 如果图片小于给定的limit值,则会被转为base64的字符串
    { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, // 处理字体文件的 loader
    { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },
     {
       test: /\.vue$/,
       loader: "vue-loader",
       options: {
         loaders:{
              scss:"style-loader!css-loader!sass-loader",
              sass:"style-loader!css-loader!sass-loader?indentedSyntax"
         }
      }
   }
]

3.4、resolve、resolveLoader

resolve: {//用来解析第三方包
    extensions: ['.js', '.vue', '.less', '.css', '.scss'],//扩展名顺序,先找js,再找vue。。。
    modules:  [path.join(__dirname, '../node_modules')],//在root里找不到【这里没有root】会去node_modules里找
    alias: {//别名,require(vue$),就说明是require vue/dist/vue.common.js
        'vue$': 'vue/dist/vue.common.js',//不存在
        'src': path.resolve(__dirname, '../src'),
        'assets': path.resolve(__dirname, '../src/assets'),//不存在
        'components': path.resolve(__dirname, '../src/components')//src和components常用
    }
},
resolveLoader: {//用来解析loader
    modules: [path.join(__dirname, '../node_modules')]在root里找不到会去node_modules里找
},

3.5、plugin

plugins: [
    new webpack.DefinePlugin({//定义环境变量
        'process.env': config.dev.env//"process.env"-----》config.dev.env-----》NODE_ENV: '"development"'
    }),
    // new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),//实现热更新,刷新浏览器必写
    new webpack.NoErrorsPlugin(),
    new HtmlWebpackPlugin({
        filename: 'index.html',//最后生成的html文件名为index.html,在打包后的文件夹elm里
        template: 'index.html',//index.html为html模版,打包后的css和js都挂载在index.html里
        favicon: 'favicon.ico',//给生成的 html 文件生成一个 favicon。属性值为 favicon 文件所在的路径名
        inject: true//script标签位于html文件的 body 底部【还可以设置title等】
    })
]

3.6、devSever

 devServer: {
     port:8003,
     contentBase:"./item"
 },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值