webpack学习之webpack.config.js详解

 一、webpack基础配置

 

  1. 在项目根目录创建 webpack.config.js 文件,只能是这个文件名

  2. 打开 webpack.config.js ,开始编写配置信息
    // 输出模块
    // __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
    module.exports = {
        entry: __dirname + "/src/index.js", // 唯一入口文件
     
        output: {
            path: __dirname + "/dist", // 打包后的文件存放的路径
            filename: "bundle.js" // 打包后输出文件的文件名
        }
    };
    
    
    module.exports:输出模块的意思
    entry:指定项目的入口
    output:指定项目的出口
  3. 在当前项目根目录运行 webpack 命令,进行打包,得到dist下的打包文件bundle.js
    该命令会默认去根目录寻找 webpack.config.js 配置文件,如果没有,则会使用 webpack 的默认配置进行打包,详情请百度  webpack4的0配置说明
webpack -p    //打包时,对文件进行压缩混淆。

webpack -d   //生成sourcemap。

二、webpack配置插件

  1. html-webpack-plugin : 把编译后的文件(css/js)插入到入口文件中,可以只指定某些文件插入,可以对html进行压缩等
    filename:输出文件名;
    template:模板文件,不局限于html后缀哦;
    removeComments:移除HTML中的注释;
    collapseWhitespace:删除空白符与换行符,整个文件会压成一行;
    inlineSource:插入到html的css、js文件都要内联,即不是以link、script的形式引入;
    inject:是否能注入内容到 输出 的页面去;
    chunks:指定插入某些模块;
    hash:每次会在插入的文件后面加上hash ,用于处理缓存,如:;
    其他:favicon、meta、title ……;

三、webpack之loader

  1. loader:webpack 可以使用 loader 来预处理文件。这允许你打包除 JavaScript 之外的任何静态资源
  2. 写法如下:在module.exports中添加一个module对象,里面写匹配的规则和对应的loader
    // 输出模块
    // __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
    module.exports = {
        mode: 'development',
        entry: __dirname + "/src/index.js", // 唯一入口文件
        output: {
            path: __dirname + "/dist", // 打包后的文件存放的路径
            filename: "bundle.js" // 打包后输出文件的文件名
        },
        module: {
    	    rules: [
    	      {
    	        test: /\.(png|jpg|gif|jpeg)$/,   //匹配规则,这里是匹配图片
    	        use: [
    	          {
    	            loader: 'url-loader',    // 对应的loader
    	            options: {
    	              limit: 8192     // 图片小于8192则会进行base64编码
    	            }
    	          }
    	        ]
    	      }
    	    ]
    	  }
    };
    
    
  3. loader安装
    一般的loader安装命令如下:
    -D: 安装在开发依赖中(打包时不会打包到bundle.js中);
    -S: 安装在生产环境依赖中(会打包到bundle.js中)
    npm i loader的名字 -D

    如有报错,则说明需要安装其他的所需模块,依次安装即可,如:url-loader依赖file-loader,故需要安装两个loader才能正确打包,否则会报错。但是在配置文件中则不需要写上file-loader。

四、常用loader和plugin配置

// 安装webpack和webpack-cli,因为下面的loader和plugin需要这两个
npm i webpack webpack-cli -D

// 打包图片的url-loader
npm i url-loader file-loader -D

// 处理css、sass、less样式文件的loader
npm i css-loader style-loader -D
npm i sass fibers node-sass sass-loader -D
npm i less less-loader -D

// 将ES6等高级语法的js文件转化为ES5语法的js文件的loader
npm i babel-loader @babel/core @babel/preset-env -D


// 该插件将CSS提取到单独的文件中。它为每个包含CSS的JS文件创建一个CSS文件。它支持CSS和SourceMap的按需加载。
npm install --save-dev mini-css-extract-plugin

// 到目前为止,我们已经将所有资产手动包含在index.html文件中,但是随着应用程序的增长,一旦您开始在文件名中使用散列并输出多个包,将很难继续index.html手动管理文件。但是,有一些插件可以简化此过程。
npm install --save-dev html-webpack-plugin

// 启动服务并支持热替换
npm i webpack-dev-server -D

对应的 webpack.config.js 配置文件:

// 输出模块
// __dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录。
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin')

const path = require('path')



const NODE_ENV = 'development'
const devMode = NODE_ENV !== 'production';


module.exports = {
	mode: NODE_ENV,
	entry: path.join(__dirname, "/src/index.js"), // 唯一入口文件
	output: {
		path: path.join(__dirname, 'dist'), // 打包后的文件存放的路径
		filename: "bundle.js" // 打包后输出文件的文件名
	},
  devServer: {
    contentBase: path.join(__dirname, 'dist'),
    compress: true,
    port: 9000
  },
  plugins: [
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: devMode ? '[name].css' : '[name].[hash].css',
      chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
    }),
    new webpack.DefinePlugin({
      'SERVICE_URL': JSON.stringify('https://127.0.0.1:8000')
    }),
    new HtmlWebpackPlugin({
      title: 'hello world',
      filename: "index.html",
      template: "./index.html"
    }),
  ],
  module: {
		rules: [
			{
				test: /\.(png|jpg|gif|jpeg)$/,
				use: [
				  {
				loader: 'url-loader',
				options: {
				limit: 8192
					}
				  }
				]
			},
      {
        test: /\.css$/,
        use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader' ]
      },
      {
        test: /\.less$/,
        use: [devMode ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
      },
      {
        test: /\.s[ac]ss$/i,
        use: [
          // Creates `style` nodes from JS strings
          devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
          // Translates CSS into CommonJS
          'css-loader',
          // Compiles Sass to CSS
          'sass-loader',
        ],
      },
      {
        test: /\.m?js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      },
      ],
	},
};

packge.json文件添加如下代码:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server"
  },

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`vue.config.js` 是 Vue CLI 3.x 以上版本中新增的配置文件,用于配置构建工具的行为。它是一个可选的配置文件,在项目根目录下创建即可。 以下是 `vue.config.js` 中可以配置的选项: ### publicPath - 类型:`string` - 默认值:`'/'` 应用部署的基础路径。默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径下,例如 `https://www.example.com/`。如果你的应用被部署在一个子路径下,你需要在这里指定子路径。例如,如果你的应用被部署在 `https://www.example.com/my-app/`,那么将 `publicPath` 设置为 `'/my-app/'`。 ### outputDir - 类型:`string` - 默认值:`'dist'` 打包生成的文件输出的目录。当运行 `npm run build` 时,生成的文件将会被放置在此目录下。 ### assetsDir - 类型:`string` - 默认值:空字符串 静态资源文件夹的名称。该文件夹中的文件将会被复制到输出目录中,例如 `img/logo.png` 会被复制到 `dist/img/logo.png`。如果设置了 `publicPath`,则在 HTML 文件中引用静态资源时需要使用该路径。 ### indexPath - 类型:`string` - 默认值:`'index.html'` 指定生成的 `index.html` 文件的输出路径。相对于 `outputDir`。 ### filenameHashing - 类型:`boolean` - 默认值:`true` 是否使用文件哈希。如果设置为 `true`,则在文件名中包含哈希以实现缓存。 ### lintOnSave - 类型:`boolean | 'warning' | 'default' | 'error'` - 默认值:`true` 是否在保存时通过 eslint-loader 在每次构建时 lint 代码。设置为 `true` 或 `'warning'` 时,保存时会输出提示信息但不会阻止编译。设置为 `'default'` 时,保存时会输出提示信息并阻止编译。设置为 `'error'` 时,保存时会输出错误信息并阻止编译。 ### runtimeCompiler - 类型:`boolean` - 默认值:`false` 是否使用包含运行时编译器的 Vue 构建版本。设置为 `true` 可以使用 `template` 选项,但会增加应用的体积。 ### transpileDependencies - 类型:`Array<string | RegExp>` - 默认值:`[]` 需要被 babel 编译的依赖包名称或正则表达式列表。如果使用了某些第三方库,可能需要将它们加入到这个选项中。 ### productionSourceMap - 类型:`boolean` - 默认值:`true` 是否在生产环境中生成 source map。开启 source map 会影响构建性能,但可以方便地调试生产环境中的代码。 ### crossorigin - 类型:`string` - 默认值:空字符串 设置生成的 HTML 文件中的 `<link>` 和 `<script>` 标签的 `crossorigin` 属性。默认情况下,没有这个属性。如果需要设置,可以使用 `'anonymous'` 或 `'use-credentials'`。 ### configureWebpack - 类型:`Object | Function` - 默认值:空对象 修改内部的 Webpack 配置。如果值是一个对象,则它将被合并到最终的配置中。如果值是一个函数,则它会接收被解析的配置作为参数。该函数可以修改配置并返回新的配置,也可以返回一个被合并的配置对象。 ### chainWebpack - 类型:`Function` - 默认值:空函数 允许对内部的 Webpack 配置进行更细粒度的修改。该选项接收一个函数,该函数会在内部的 Webpack 配置被解析完成后执行。可以使用 [webpack-chain](https://github.com/neutrinojs/webpack-chain) API 对配置进行修改。 ### css - 类型:`Object` - 默认值:空对象 配置 CSS 相关选项。 #### css.modules - 类型:`boolean` - 默认值:`false` 是否开启 CSS modules。启用 CSS modules 后,类名将会被自动转换为哈希字符串,以避免样式冲突。 #### css.extract - 类型:`boolean | Object` - 默认值:`true` 是否将 CSS 提取为单独的文件。默认情况下,生产环境中会提取 CSS,开发环境中不会。如果设置为 `false`,则所有的 CSS 代码会被包含在 JavaScript 文件中。 如果设置为一个对象,则可以通过 `filename` 选项来指定提取出来的 CSS 文件名,以及 `chunkFilename` 选项来指定异步加载的 CSS 文件名。 #### css.sourceMap - 类型:`boolean` - 默认值:`false` 是否为 CSS 开启 source map。 #### css.loaderOptions - 类型:`Object` 向 CSS 相关的 loader 传递选项。例如: ```javascript module.exports = { css: { loaderOptions: { sass: { data: `@import "@/styles/variables.scss";` } } } } ``` 上述配置表示向 `sass-loader` 传递了一个名为 `data` 的选项,该选项包含了一个 SCSS 变量文件的引用。 ### devServer - 类型:`Object` - 默认值:空对象 配置开发服务器行为。 #### devServer.port - 类型:`number` - 默认值:`8080` 开发服务器监听的端口号。 #### devServer.host - 类型:`string` - 默认值:空字符串 开发服务器监听的主机名。如果想让服务器可以被外部访问,应将该值设置为 `0.0.0.0`。 #### devServer.proxy - 类型:`string | Object` - 默认值:空对象 配置 devServer 的代理。可以使用字符串或对象来代理多个路径。例如: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:3000', changeOrigin: true } } } } ``` 上述配置表示将所有以 `/api` 开头的请求转发到 `http://localhost:3000`。`changeOrigin` 选项表示是否改变请求头中的 `host` 值。 #### devServer.before - 类型:`Function` 提供在服务器内部所有其他中间件之前执行自定义中间件的能力。该函数接收 app、server 和 compiler 3 个参数。例如: ```javascript module.exports = { devServer: { before(app) { app.get('/api/user', (req, res) => { res.json({ name: 'Vue.js' }) }) } } } ``` 上述配置表示在开发服务器启动后,访问 `/api/user` 路径时返回一个名为 `Vue.js` 的 JSON 数据。 ### pluginOptions - 类型:`Object` - 默认值:空对象 向插件传递选项。例如: ```javascript module.exports = { pluginOptions: { foo: { bar: true } } } ``` 上述配置表示向 `foo` 插件传递了一个名为 `bar` 的选项,该选项的值为 `true`。 以上是 `vue.config.js` 中的一些常用选项,还有其他选项可以在需要时查阅官方文档,进行更详细的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值