webpack.config.js配置文件

本文介绍Webpack的基本配置方法,包括配置文件的创建、插件的使用、开发环境的搭建及webpack-dev-server的配置。此外还介绍了如何利用npm安装依赖、启动开发服务器等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基本配置
webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行。默认会搜索当前目录下webpack.config.js。这个文件是一个node.js模块,返回一个json格式的配置对象,或者通过--config选项来指定配置文件。
 
//创建webpack.config.js
var webpack = require('webpack');
module.exports = {
     entry:'./entry.js', //入口文件
     output:{
          //node.js中__dirname变量获取当前模块文件所在目录的完整绝对路径 
          path:__dirname, //输出位置
          filename:'build.js' //输入文件
     },
     module:{
          loaders:[
               {
                   test:/\.css$/,//支持正则
                   loader:'style-loader!css-loader' 
               }
          ]
     },
//其他解决方案配置
resolve: {
    extensions: ['', '.js', '.json', '.css', '.scss']//添加在此的后缀所对应的文件可以省略后缀
},
     //插件
     plugins:[
          new webpack.BannerPlugin('This file is created by ly')
     ]
}
 
//entry.js中引入css模块:
require('./style.css');
 
::运行
webpack
 
2、plugins 插件
可以通过npm安装第三方插件,如:BannerPlugin的作用是给输出的文件头部添加注释信息。
 
3、开发环境
 
::编译输出内容带进度和颜色
webpack --progress --colors
 
::启动监听模式(没有变化的模块会在编译后缓存大内存中,不会每次都被重新编译)
webpack --watch
webpack -w
 
::使用开发服务(它将在localhost:8080启动一个express静态资源web服务器。并启动监听模式自动webpack,在浏览器打开http://localhost:8080/,就可以浏览项目页面,并通过一个socket.io服务实时监听变化并自动刷新页面)
npm install webpack-dev-server -g
 
4、启动webpack-dev-server
注意:在启动了webpack-dev-server后,编译后的文件并没有输出到webpack.config.js中配置的output输出目标文件夹中,而是将实时编译后的文件保存在内存中。
例子:
 
//目录结构
myapp
    |__dist
    |   |__styles
    |   |__js
    |       |__bundle.js
    |   |__index.html
    |__src
    |   |__component
    |   |__index.js
    |__node_modules
    |__package.json
    |__webpack.config.js
 
//webpack.config.js
var webpack = require('webpack');
var path = require('path');
module.exports = {
    entry:'./src/index.js',
    output:{
        path:path.resolve(__dirname, './dist/'),
        filename:'build.js'
    },
    //设置开发者工具的端口号,不设置则默认为8080端口
    devServer: {
        inline: true,
        port: 8181
    },
    module:{
        loaders:[
            {
                test:/\.js?$/,
                exclude:/node_modules/,
                loader:'babel-loader',
                query:{
                    presets:['es2015','react']
                }
            },
            {
                test:/\.css$/,
                loader:'style-loader!css-loader'
            }
        ]
    }
};
 
//package.json
{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "build.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --devtool eval-source-map --progress --colors --hot --inline --content-base ./dist",
    "build": "webpack --progress --colors"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.23.1",
    "babel-loader": "^6.4.0",
    "babel-preset-es2015": "^6.22.0",
    "jsx-loader": "^0.13.2",
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "webpack": "^2.2.1",
    "webpack-dev-server": "^2.4.1"
  },
  "dependencies": {
    "jquery": "^3.1.1"
  }
}
 
<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<div id="app"></div>
<script src="build.js"></script>
</body>
</html>
 
::安装所有依赖
npm install
::运行
npm run dev
 
最后在浏览器中打开:http://localhost:8181/index.html
 
详解package.json中命令:
 
webpack-dev-server   //启动webpack-dev-server
--progress --colors    //打包进行显示颜色
--hot  //开启模块热修复功能
--content-base ./dist   //设置webpack-dev-server运行的根目录是 ./dist
--inline  //使用inline的方式进行页面自动刷新
--quiet  //控制台中不输出打包信息
--compress  //开启gzip压缩
 
webpack-dev-server支持两种自动刷新的方式:
①Iframe mode
在网页中嵌套一个iframe,将自己的应用注入都这个iframe中,每次文件修改后都是这个iframe进行了reload
②inline mode
也是自动便也打包刷新
 
 
### 关于 `webpack.config.js` 和 `webpack.config.dev.js` #### 定义与用途 `webpack.config.js` 是 Webpack 的通用配置文件,适用于所有环境下的打包需求[^1]。它通常包含了入口文件、输出路径、加载器(loaders)、插件等基础配置项。 而 `webpack.config.dev.js` 则是一个专门针对开发环境的配置文件。它的设计目的是为了优化开发体验,提供更快的反馈速度以及更丰富的调试功能。例如,在开发环境中可能会启用热更新(Hot Module Replacement, HMR),或者设置更具可读性的错误提示和源码映射(Source Map)。这些特性可能并不适合生产环境,因此被单独抽离出来[^2]。 #### 配置差异分析 以下是两者之间常见的配置差异: 1. **模式 (Mode)** - 在 `webpack.config.js` 中,可以同时支持多种模式(如 development 和 production),通过命令行参数动态切换。 ```javascript module.exports = { mode: process.env.NODE_ENV === 'production' ? 'production' : 'development' }; ``` - 而在 `webpack.config.dev.js` 中,默认会固定为 `development` 模式,专注于提升开发效率。 2. **性能优化** - 生产环境下 (`webpack.config.js`) 更注重代码压缩、Tree Shaking 等性能优化措施。这可以通过引入像 UglifyJSPlugin 或 TerserPlugin 来实现[^4]。 ```javascript const TerserPlugin = require('terser-webpack-plugin'); module.exports = { optimization: { minimize: true, minimizer: [new TerserPlugin()], }, }; ``` - 开发环境下 (`webpack.config.dev.js`) 主要考虑快速增量构建和即时反馈机制,不会应用过多耗时的操作。 3. **DevServer 设置** 只有在 `webpack.config.dev.js` 文件中才会包含 DevServer 的相关配置。这是因为它仅服务于本地开发阶段,允许实时预览更改效果而不需手动刷新页面[^2]。 ```javascript module.exports = { devServer: { contentBase: './dist', hot: true, port: 8080, } }; ``` 4. **Source Maps** 对于调试目的来说,开发版本往往需要开启 Source Maps 功能以便更容易追踪原始代码位置;然而出于安全性和体积考虑,正式上线前一般关闭此选项[^3]。 ```javascript // webpack.config.dev.js module.exports = { devtool: 'cheap-module-eval-source-map', }; // webpack.config.js (Production) module.exports = { devtool: false, }; ``` 5. **Plugins 插件列表** 不同类型的插件也会依据实际应用场景有所区分。比如 DefinePlugin 常见于两种情况都存在以注入全局变量,但 CleanWebpackPlugin 大概率只会在最终发布流程里调用清除旧版资源文件夹[^1]. --- ### 示例对比 下面给出两个简化版的例子展示它们各自的特点: - #### `webpack.config.js` ```javascript const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.[contenthash].js', path: path.resolve(__dirname, 'dist'), }, mode: 'production', }; ``` - #### `webpack.config.dev.js` ```javascript const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, mode: 'development', devServer: { static: './dist', open: true, hot: true, }, devtool: 'inline-source-map', }; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值