webpack

什么是? 

    wabpack是当前最流行的打包工具

webpack能做什么?

    将 sass/less 等预编译css语言 转化为 浏览器能够认识的css文件

    将多个文件打包生成为一个文件

    搭建开发环境(开启了服务器)

    监视文件变化,文件改变后,能够自动刷新浏览器

    对于vue来说,可以将单文件组件(*.vue)类型的文件,  转化为浏览器能够识别的内容

  

    项目打包上线:  基于vue脚手架只需要执行一条命令:npm run  build 就可以对项目进行打包处理了

                所有文件(css/js/html)的压缩合并

             在打包的过程中,分离  或者  合并 文件 

             能够通过 代码分离功能实现 项目的按需加载(用到什么模块加载什么模块,懒加载)

                 命令行使用方式(了解即可)

// webpack 的使用步骤:
//  初始化一个package.json文件 : npm init -y
// 1 安装: npm i -D webpack webpack-cli
// 2 webpack 使用的两种方式:
//  2.1 命令行的使用方式(知道)
//  2.2 配置文件

// webpack的四个核心概念:
// 1 入口 entry
// 2 出口 打包后输出内容
// 3 loaders 加载器:对于非JS的静态资源
// 4 plugins 插件

// 演示命令行的使用方式:
// webpack 入口文件 出口文件路径
// 最基本的打包: webpack ./src/main.js

// 注意:使用 webpack 的时候应该提供mode, 可以是: production 或者 development
// production 表示: 生产模式(压缩的)    -- 生产环境(也就是给用户使用的)
// development 表示: 开发模式   -- 开发环境(也就是给开发人员开发使用的)

// 指定模式: .
ode_modules.binwebpack ./src/main.js --mode development
// 指定为生产模式: .
ode_modules.binwebpack ./src/main.js --mode production

// 演示指定出口文件路径:
//  .
ode_modules.binwebpack ./src/main.js -o ./dist/a.js --mode production

const fn = () => {
  console.log('main.js 中的fn 执行了')
}
fn()

main - 2 配置scripts去掉路径前缀.js

/*
.
ode_modules.binwebpack ./src/main.js --mode development
解决问题: 去掉 .
ode_modules.bin


1 在 package.json 的 scripts 中添加一个 build 脚本
2 将 webpack 命令作为 build 脚本的值  webpack ./src/main.js --mode development
3 在终端中执行命令: npm run build 来运行上面创建好的脚本

package.json文件
{
  "name": "15-webpack-basic",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack ./src/main.js --mode development",
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^1.0.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.23.0",
    "webpack": "^4.19.0",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.8"
  },
  "dependencies": {
    "jquery": "^3.3.1"
  }
}
*/

const fn = () => {
  console.log('main.js 中的fn 执行了')
}
fn()

main - 3 webpack打包处理的过程.js

/*
webpack打包处理的过程::

案例: 使用jQuery实现隔行变色的效果

浏览器或者NodeJS中 都无法直接识别 import 语法,
但是, 经过webpack打包处理后, 浏览器就能够识别这个语法了

webpack打包处理的过程:
1 运行了webpack的打包命令: webpack ./src/main.js --mode development
2 webpack 就会找到我们指定的入口文件 main.js
3 webpack 就会分析 main.js 中的代码, 当遇到 import $ .... 语法的时候, 那么, webpack
   就知道,我们要使用 jQuery 这个模块
4 webpack 就会将jQuery模块的代码拿过来
5 然后,继续往后分析, 如果在遇到 import 语法, 继续加载这个模块 ...
6 直到分析完成整个 JS 文件后, 将 main.js 中所有用到的模块代码 与 我们自己写的js代码
  打包生成一个JS文件, 也就是 dist/main.js

CommonJS 中的模块化语法
const $ = require('jquery')
*/

// ES6 中的模块化语法:
import $ from 'jquery'

$('#list > li:odd').css('background-color', 'red')
$('#list > li:even').css('background-color', 'green')

webpack配置文件的使用(重点使用)

webpack 配置文件的使用方式:
    在项目根目录中创建配置文件: webpack.config.js
/*
package.json文件
{
  "name": "15-webpack-basic",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack",  //项目完成打包,因为在根目录有webpack.config.js配置文件,所以可以直接使用webpack
    "serve": "webpack-dev-server --hot",  //开发期间使用(启动脚手架)  hot表示热更新,代替下边的三步
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^1.0.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.23.0",
    "webpack": "^4.19.0",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.8"
  },
  "dependencies": {
    "jquery": "^3.3.1"
  }
}
*/


// 注意: 不要使用 ES6 中的模块化语法 import/export
const path = require('path')    //导入path模块,需要使用绝对路径
// const webpack = require('webpack')  01 热更新需要引入webpack

// 导入html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  // 入口
  entry: path.join(__dirname, './src/main.js'),//__dirname指当前文件的目录

  // 出口
  output: {
    path: path.join(__dirname, './dist'),  //出口文件路径
    filename: 'bundle.js'    //  出口文件名
  },

  // 模式
  mode: 'development',//开发环境(程序员看)


  devServer: {
    // 自动打开浏览器
    open: true,
    // 修改端口号
    port: 3000,
    // 热更新: 只将修改过得内容加载到页面中, 而不是刷新整个页面
    // 第一步:02
    // hot: true
  },

  // 配置loader
  module: {
    rules: [
      // test 是一个正则, 用来匹配加载文件的路径
      //  比如: import './css/index.css'

      // use 表示使用哪个loader来处理这个类型的文件
      // 注意: 有顺序!!!
      // 处理过程是: 从右往左

      // css-loader 读取CSS文件,将其转化为一个模块
      // style-loader 拿到css-loader读取到的css文件内容,然后,创建一个style标签,插入到head
      { test: /.css$/, use: ['style-loader', 'css-loader'] }
    ]
  },

  plugins: [
    // 第二步:03
    // new webpack.HotModuleReplacementPlugin(),

    new HtmlWebpackPlugin({
      // 指定模板文件路径
      template: path.join(__dirname, 'index.html')
    })
  ]
}
// html-webpack-plugin

// 作用:
// 1 根据指定的模板页面(index.html)在内存中生产一个新的页面
//    并且, 浏览器打开的就是 生成的页面
// 2 能够自动引入 css/js 等文件

// 使用:
// 1 安装: npm i -D html-webpack-plugin
// 2 在 webpack.config.js 中导入这个模块
// 3 在 plugins 中配置

// ES6 中的模块化语法:
import $ from 'jquery'

$('#list > li:odd').css('background-color', '#def')
$('#list > li:even').css('background-color', 'skyblue')
/*
开启服务器:

webpack-dev-server    开发期间的服务器

1 npm i -D webpack-dev-server  安装
2 开启服务器
3 自动打开浏览器
4 监视文件变化, 自动刷新浏览器
5 等等

使用步骤:
1 安装: npm i -D webpack-dev-server
2 在 webpack.config.js 中配置 devServer 配置项
3 在 package.json 中添加一个配置项: "serve": "webpack-dev-server"

webpack-dev-server 帮我们搭建了开发环境, 使用之后, 我们只需要
写代码完成功能即可, 其他的所有内容, 这个插件都帮我们处理了

webpack-dev-server 命令 和 webpack 命令的区别:
开发期间 webpack-dev-server
项目打包上线 webpack

webpack 命令会生产 dist 文件夹
webpack-dev-server 不会创建 dist 文件夹, 而是将所有内容放在内存中
*/

// ES6 中的模块化语法:
import $ from 'jquery'

$('#list > li:odd').css('background-color', '#def')
$('#list > li:even').css('background-color', 'skyblue')
原文地址:https://www.cnblogs.com/javascript9527/p/11414292.html