zoukankan      html  css  js  c++  java
  • build 文件夹中的 webpack.dev.conf.js

      1 //此文件是开发环境下webpack相关配置
      2 'use strict'
      3 const utils = require('./utils')
      4 const webpack = require('webpack')
      5 const config = require('../config')
      6 const merge = require('webpack-merge') //导入webpackage-merge 用来合并对象 去掉重复的属性
      7 const path = require('path')
      8 const baseWebpackConfig = require('./webpack.base.conf')
      9 const CopyWebpackPlugin = require('copy-webpack-plugin') //导入copy-webpack-plugin 用来复制
     10 const HtmlWebpackPlugin = require('html-webpack-plugin') //导入html-webpack-plugin 用来自动生成html
     11 const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') //导入friendily-errors-webpack-plugin 用来收集和展示错误日志
     12 const portfinder = require('portfinder') //导入portfinder 用来获取port
     13 
     14 // 主机
     15 const HOST = process.env.HOST
     16 
     17 // 端口
     18 const PORT = process.env.PORT && Number(process.env.PORT)
     19 
     20 // 合并
     21 const devWebpackConfig = merge(baseWebpackConfig, {
     22   mode: 'development',
     23   module: {
     24 
     25     //解析样式文件的规则 
     26     rules: utils.styleLoaders({
     27       sourceMap: config.dev.cssSourceMap,
     28       usePostCSS: true
     29     })
     30   },
     31 
     32   // cheap-module-eval-source-map is faster for development
     33   // 开发工具 用来调试
     34   devtool: config.dev.devtool,
     35 
     36 
     37   // 服务器 如需要请求本地数据时  需要在此块添加其他配置
     38   // 这些 devServer 选项应该在 /config/index.js 中定制
     39   devServer: {
     40 
     41     //重新加载server,控制台以warning方式提示错误
     42     clientLogLevel: 'warning',
     43 
     44 
     45     //HTML5 history api时,任意的404可能需要被替代为index.html
     46     historyApiFallback: {
     47       rewrites: [{
     48         from: /.*/,
     49         to: path.posix.join(config.dev.assetsPublicPath, 'index.html')
     50       }, ],
     51     },
     52     hot: true, //启用热替换
     53 
     54     contentBase: false, // 告诉服务器从哪里提供内容,只有在你想要提供静态文件时才需要,这里是禁用 ( since we use CopyWebpackPlugin. )
     55 
     56     compress: true, //是否压缩
     57     host: HOST || config.dev.host, //主机
     58     port: PORT || config.dev.port, //端口
     59     open: config.dev.autoOpenBrowser, //是否自动打开浏览器
     60 
     61     // 编译出错时是否有提示
     62     overlay: config.dev.errorOverlay ? {
     63       warnings: false,
     64       errors: true
     65     } : false,
     66 
     67     publicPath: config.dev.assetsPublicPath, //静态资源路径 此路径可在浏览器中打开
     68     proxy: config.dev.proxyTable, //代理
     69     quiet: true, // 启用quiet 意思是除了启动信息以外的任何信息都不会打印在控制台 (necessary for FriendlyErrorsPlugin)
     70 
     71     // 监视文件的选项
     72     watchOptions: {
     73       poll: config.dev.poll,
     74     }
     75   },
     76   plugins: [
     77     // 自定义一个plugin 生成当前环境的一个变量
     78     new webpack.DefinePlugin({
     79       'process.env': require('../config/dev.env')
     80     }),
     81     new webpack.HotModuleReplacementPlugin(), //模块热替换插件 修改模块时不需要刷新页面
     82 
     83     // https://github.com/ampedandwired/html-webpack-plugin
     84     // 这是一个webpack插件,可以简化HTML文件的创建,从而为您的webpack bundle提供服务。这对于webpack bundle特别有用,因为它在文件名中包含一个哈希值,这会改变每次编译。你可以让插件为你生成一个HTML文件,使用lodash模板提供你自己的模板,或者使用你自己的加载器。
     85     new HtmlWebpackPlugin({
     86       filename: 'index.html',
     87       template: 'index.html',
     88       favicon: path.resolve(__dirname, '../static/images/favicon.ico'),
     89       inject: true,
     90       dll: (function () {
     91         let max = 2
     92         let res = []
     93         for (let i = 0; i < max; i++) {
     94           const dllName = require(path.resolve(__dirname, `../dllManifest/xuAdmin${i}-manifest.json`)).name.split('_')
     95           res.push(`/static/dll/${dllName[0]}.${dllName[1]}.dll.js`)
     96         }
     97         return res
     98       })()
     99     }),
    100     // 复制静态资源到开发环境的路径
    101     new CopyWebpackPlugin([{
    102       from: path.resolve(__dirname, '../static'),
    103       to: config.dev.assetsSubDirectory,
    104       ignore: ['.*']
    105     }])
    106   ]
    107 })
    108 
    109 // 导出
    110 module.exports = new Promise((resolve, reject) => {
    111   // 获取basePort
    112   portfinder.basePort = process.env.PORT || config.dev.port
    113   // 端口配置
    114   portfinder.getPort((err, port) => {
    115     if (err) {
    116       reject(err)
    117     } else {
    118       process.env.PORT = port // 发布 e2e 测试所需的新端口
    119       devWebpackConfig.devServer.port = port // 添加端口到 devServer 配置
    120 
    121       // 添加友好提示(Add FriendlyErrorsPlugin)
    122       devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
    123         // 编译成功提示
    124         compilationSuccessInfo: {
    125           // 提示运行的组机和端口
    126           messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
    127           // 备注
    128           notes: [`   _     _       _     _       _     _        _     _      _     _     
    129                      (c).-.(c)     (c).-.(c)     (c).-.(c)     (c).-.(c)     (c).-.(c)    
    130                       / ._. \      / ._. \      / ._. \      / ._. \      / ._. \   
    131                    __\( Z )/__  __\( Y )/__  __\( J )/__  __\( B )/__  __\( X )/__  
    132                    (_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
    133                      || L ||       || O ||        || V ||        || E ||       || . ||      
    134                  _.' \`-' '._  _.' \`-' '._  _.' \`-' '._  _.' \`-' '._  _.' \`-' '._  _.' 
    135                 (.-./\`-'\.-.)(.-./\`-'\.-.)(.-./\`-'\.-.)(.-./\`-'\.-.)(.-./\`-'\.-.)
    136                 \`-'     \`-'  \`-'     \`-'  \`-'     \`-'  \`-'     \`-'  \`-'     \`-'  `]
    137         },
    138         // 错误提示
    139         onErrors: config.dev.notifyOnErrors ?
    140           utils.createNotifierCallback() : undefined
    141       }))
    142 
    143       resolve(devWebpackConfig)
    144     }
    145   })
    146 })
  • 相关阅读:
    艾伟:一个让人遗忘的角落—Exception(二) 狼人:
    艾伟:ASP.NET 2.0的编译模型 狼人:
    艾伟:VS 2008快捷键 狼人:
    艾伟:[一步一步MVC]第一回:使用ActionSelector控制Action的选择 狼人:
    艾伟:C# Design Patterns (3) Decorator 狼人:
    艾伟:详解AJAX核心 —— XMLHttpRequest 对象 (下) 狼人:
    艾伟:HTML重构:战略篇 狼人:
    艾伟:WCF安全之EndPointIdentity 狼人:
    翻转句子中单词的顺序
    menucool
  • 原文地址:https://www.cnblogs.com/zhuyujie/p/14074638.html
Copyright © 2011-2022 走看看