webpack简单笔记

出入口配置

1:入口和出口,一般单页面应用,就只有一个程序启动入口entry和出口output:

const config = {
// 给entry传一个字符串就可以了
  entry: './path/to/my/entry/file.js',
  output: {
    filename: 'bundle.js',
    path: '/home/proj/public/assets'
  }
};
module.exports = config;
复制代码

2: 但是需要搭建多页面应用的话,entry和output配置如下:

const config = {
// entry 传对象集合就好了
  entry: {
    A: './src/A/index.js',
    B: './src/B/index.js',
    C: './src/C/index.js'
  },
  output: {
  // [name]占位符确保每个文件具有唯一的名称, __dirname, 代指当前目录名
    filename: '[name].js',
    path: __dirname + '/dist'
  }
   // 写入到硬盘:./dist/A.js, ./dist/B.js, ./dist/C.js
};
复制代码

3:使用CDN和资源hash配置:

output: {
  path: "/home/proj/cdn/assets/[hash]",
  publicPath: "http://cdn.example.com/assets/[hash]/"
}
复制代码

开发模式

module.exports = {
  mode: 'production | development'
};
复制代码
选项 描述
development 会将 process.env.NODE_ENV 的值设为 development。启用 NamedChunksPlugin 和 NamedModulesPlugin,这两个插件主要配合热更新使用:在控制台打印哪儿些模块使用了热更新,以及路径信息。
production 会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin.webpack内置插件压缩优化代码

loader和plugins

1:理解
loader: 由于webpack只具备解析js和json的能力,所以需要用loader把各种模块的源代码进行转换,如把TypeScript转成JavaScript,把图片转成data URL,把css转成遵从Common Js规范的模块等等。

plugins:用于文件的压缩、抽离,打包优化。

过多的使用loader和plugins会导致webpack的项目配置十分臃肿复杂,甚至会导致打包速度变慢。升级webpack版本的时候也有可能会导致,某一个plugins或loader报错。

2:配置

const HtmlWebpackPlugin = require('html-webpack-plugin'); //通过 npm 安装
const webpack = require('webpack'); //访问内置的插件
const path = require('path');

const config = {
  entry: './path/to/my/entry/file.js',
  output: {
    filename: 'my-first-webpack.bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin(),
    new HtmlWebpackPlugin({template: './src/index.html'})
  ]
};

module.exports = config;
复制代码

工作机制

1:基本配置
webpack配置是遵循Common JS规范(通过使用require(…)方法导入文件、使用其它工具函数),导出一个对象的Js文件。当需要多个Target时,module.exports = config, config是一个由多个对象组成的数组。

2:基本要素

module是webpack运行的基本条件;

模块路径是解析模块的必要条件;

Manifest文件用来引导模块的打包与加载(里面包括了加载和处理模块的逻辑);

模块热替换(HMR – Hot Module Replacement),热更新功能主要就是对manifest文件中模块加载逻辑的改变。

3:总结

webpack的打包加载逻辑在于manifest文件,manifest文件包括的就是模块间的加载处理逻辑,模块间的加载处理逻辑是来源于模块间的相关引用(import, require等),热更新就是改变manifest文件中的逻辑。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享