核心部分:
- entry
- output
- mode:
- loader:
- plugin:
启动配置修改package.json- "scripts":{
- "start": "webpack serve",
- "build": "webpack"
- }
 编译后内容在src目录下,创建index.js和title.js。index作为入口文件。 ```javascript // index.js const title = require(“./title”); console.log(title);
// title.js require(“lodash”)
exports.name = “hello”; module.exports = “titles”;
经过webpack编译后
```javascript
// webpack 编译后,外层一个自执行函数
(() => {
var modules = {
// 函数3个参数,后2个可省略,如果使用到才会显示
// exports 对应着在module文件中需要使用exports.xxx 这样导出
// __webpack_require__ 对应着使用了require/import这样导入文件
"./src/title.js": (module, exports, __webpack_require__) => {
__webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
exports.name = "hello";
module.exports = "titles";
},
};
var cache = {}; // 定义缓存,如果缓存有值,直接使用缓存
function __webpack_require__(moduleId) {
if (cache[moduleId]) {
return cache[moduleId].exports;
}
// 定义module.exports = {}
var module = (cache[moduleId] = { exports: {} });
modules[moduleId](module, module.exports, __webpack_require__);
return module.exports;
}
// 从entry入口处开始执行,也是调用自执行函数
// index.js
(() => {
// __webpack_require__ 是webpack 自定义的函数执行
let title = __webpack_require__("./src/title.js");
console.log(title);
})();
})();
配置devServer
修改webpack.config.js
module.exports = {
devServer: {
static: resolve(__dirname, "dist"),
compress: true,
port: 8001,
open: true,
},
}
使用loader处理文件
处理css、scss、less等文件
module.exports = {
module: {
rules: [
// ...
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
],
},
}
处理jpg、png、gif、bmp等图片
module.exports = {
module: {
rules: [
// ...
{
test: /\.(jpg|png|gif|svg|bmp)$/,
use: ["file-loader"],
}
],
},
}
引入图片的方式
- 从静态目录下,直接通过img标签 绝对路径引入,需要配置devServer.static
- 通过 require import引入
- 通过css文件的url引入,是通过css-loader进行解析处理
- 在html中直接通过 相对路径引入,需要将html用html-loader处理 - url-loader和file-loader的区别
- url-loader比file-loader多了limit配置,小于改设置时,图片以base64显示 
- url-loader是对file-loader的增强。
- 
转ES6、7,react的jsx为es5安装依赖 - yarn add babel-loader @babel/core @babel/preset-env
- @babel/preset-react @babel/polyfill
- @babel/plugin-proposal-decorators
- @babel/plugin-proposal-class-properties -D
 
- @babel/plugin-proposal-decorators:可以使用装饰器语法 
- @babel/plugin-proposal-class-properties:使用class类语法 - module.exports = {
- module: {
- rules: [
- {
- test: /\.jsx?$/,
- use: [
- {
- loader: "babel-loader",
- options: {
- presets: [
- [
- "@babel/presets-env",
- {
- useBuiltIns: "usage", // 按需加载polyfill
- corejs: { version: 3 }, //指定corejs版本
- targets: { //指定浏览器版本
- chrome: "60",
- firefox: "60",
- ie: "9",
- safari: "10",
- edge: "17",
- },
- },
- ], "@babel/presets-react"],
- plugins: [
- ["@babel/plugins-proposal-decorators", { legacy: true }],
- ["@babel/plugin-proposal-class-properties", { loose: true }],
- ],
- },
- },
- ],
- }
- ]
- }
- }
 - devTool设置source-map- | eval | 不产生source-map信息,使用eval包裹代码块 | | —- | —- | | source-map | 产生source-map文件, 包含行、列信息 | | cheap | source-map文件内,不包含列信息,也不包含loader产生的source-map | | module | 包含loader产生的source-map | | inline | 将map信息作为DataURI内嵌到js文件,不单独产生source-map | 
- 开发环境推荐使用cheap-module-eval-source-map - module包含信息全,包含了loader信息。eval有缓存可以更快
 
- 生产环境推荐使用hidden-source-map 
- 直接安装包,进行导入使用 - import _ from "lodash";
 
- 使用插件, webpack.ProvidePlugin进行导入- 在plugins中使用 new webpack.ProvidePlugin({_: 'lodash'})
 
- 在plugins中使用 
- 使用expose-loader
- CDN结合externals引入。- 模版html引入lodash链接地址
- 在webpack.config.js中设置externals: { lodash: '_' }
 
- 使用插件html-webpack-externals-plugin,  进行引入- plugins:[
- new HtmlWebpackExternalsPlugin({
- externals: [
- {
- module: 'jquery',
- entry: 'dist/jquery.min.js',
- global: 'jQuery',
- },
- ],
- })
- ]
 设置环境变量通过webpack设置直接在命令行配置webpack --env=dev --open;
 这种方式设置的变量,会被传递到函数中作为参数。- module.exports = (env)=>{
- console.log(env);
- return {
- //....
- }
- }
 通过cross-env设置在mac环境需要设置export NODE_ENV = dev webpack;
 在window需要set NODE_ENV = dev webpack
 通过cross-env可以跨环境设置env;cross-env NODE_ENV=dev webpack;
 直接在webpack.config.js中通过process.env获取- const nodeEnv = process.env.NODE_ENV;
- console.log(nodeEnv);
 
 
                         
                                

