前言:随着ES的普及我们越来越多的开始使用ES6的语法了,当然也随着mvvm框架的流行少不了js模块化,那js模块化又有那些呢

在很早的时候大家都用的命名空间,现在也有人用(库名.类别名.方法名)

后来出现了CommonJS、AMD、CMD、UMD,现在流行ES 6 module

CommonJS的基本介绍:

一个文件为一个模板,通过module.exports暴露模块接口,通过require引入模块,同步执行

规范:http://wiki.commonjs.org/wiki/Modules/1.1.1

AMD的基本介绍:

全称:Async Module Definition,使用define定义模块,使用require加载模块,常用库RequireJS,依赖前置、提前执行

规范:https://github.com/amdjs/amdjs-api/wiki/AMD

CMD的基本介绍:

全称:Common Module Definition,一个文件做为一个模块,使用define来定义一个模块、使用require来加载一个模块,代表作SeaJS,尽可能地懒执行

规范:https://github.com/cmdjs/specification/blob/master/draft/module.md

UMD的基本介绍:

全称:Universal Module Definition

叫做通用解决方案,基本三个步骤:判断是否支持AMD、是否支持CommonJS、如果都没有使用全局变量

ES6 M 基本介绍:

全称:EcmaScript Module

一个文件一个模块,export/import

那Webpack支持哪些打包呢?

AMD(RequireJS),ES Modules(推荐的),CommonJS,常用的就是后两种

-----------------------下面开始-------------------------------

环境准备:node npm webpack

第一步安装webpack:cmd里执行   npm install webpack -g

我的现在装的是最新版4.31版本

如果版本低的可以先uninstall再安装

webpack的核心是:Entry、Output、Loaders、Plugins都在webpack.config.js文件里配置

Entry:代码的入口,也是打包的入口,可以是单个,也可以是多个

Output:打包成的文件,也可以是一个或多个

module.exports = {
entry: {
app: './src/app.js',
search: './src/search.js'
},
output: {
filename: '[name].js', //这里[]里的name就是app和search也就是entry里的key值
path: __dirname + '/dist'
}
}; // 写入到硬盘:./dist/app.js, ./dist/search.js

Loaders:loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块,以供应用程序使用,以及被添加到依赖图中。

注意:loader 能够 import 导入任何类型的模块(例如 .css 文件),这是 webpack 特有的功能,其他打包程序或任务执行器的可能并不支持。

在更高层面,在 webpack 的配置中 loader 有两个属性:

  1. test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
  2. use 属性,表示进行转换时,应该使用哪个 loader。
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}

Plugins:插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。

想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建它的一个实例。

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
const webpack = require('webpack'); // 用于访问内置插件 module.exports = {
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
},
plugins: [
new HtmlWebpackPlugin({template: './src/index.html'})
]
};

在上面的示例中,html-webpack-plugin 为应用程序生成 HTML 一个文件,并自动注入所有生成的 bundle。

webpack打包可以有什么方式:1.命令   2.配置   3.第三方脚手架

最简单的打包命令:

webpack app.js file.js            //app.js是入口文件      file.js是打包后的文件

使用配置:

在你需要打包的项目文件夹下建一个webpack.config.js配置代码如下

module.exports = {
entry: {
app: './app.js',
},
output: {
filename: '[name].[hash:5].js', //这里[hash:5]会随机生成一个版本号作为你的打包js版本
}
};

然后在当前目录下执行:webpack    //就可以直接打包了

-------------------

打包都是很简单的,那下面就是最关键的webpack如何编译ES6/7的语法呢

这里我们就要用到Babel,执行下面两条命令安装babel-loader和preset(preset主要的作用就是指定我们的babel-loader打包成我们想要的样子,preset可以进行配置)

npm install babel-loader@8.0.0-beta.0 @babel/core

npm install @babel/preset-env --save-dev

怎么配置preset?如下在webpack.config.js文件里

再介绍两个重要插件,对编译es6/7的语法很重要

安装插件:

npm install babel-polyfill  --save

Babel Polyfill:表示全局垫片,各个浏览器对标准的实现不一样,用这个工具就可以统一方法,为应用准备的

安装插件:

npm install @babel/runtime --save

npm install @babel/plugin-transform-runtime --save-dev

Babel Runtime Transform:局部垫片,为开发框架做准备的

怎么使用呢?

在webpack.config.js的文件同目录下建一个.babelrc文件就是json

把webpack.config.js文件里options下的presets剪切到.babelrc文件里

{
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": ["> 1%", "last 2 versions"]
}
}]
],
"plugins": ["@babel/transform-runtime"]
}

  这里要用标准的json数据格式

这时候就可以在cmd里执行:webpack

不管你js里用了什么的es6语法最后都会打包编译成浏览器可以识别的js方法

webpack如何编译ES6打包的更多相关文章

  1. 前端工程化-webpack(babel编译ES6)

    最新版安装与普通安装 使用babel-loader编译ES6,需要遵循规范,安装babel-presets 规范列表 对应babel-loader,babel-preset安装最新版和普通版: pre ...

  2. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  3. vue 2.0 无法编译ES6语法

    # vue2.0 webpack 无法编译 ES6 语法 之前在使用 vue 1.x 时用 vue-loader@8.0.0 版本可以正常打包vue的代码,包括ES6语法也能正常转为ES5语法,但是当 ...

  4. webpack4 系列教程(二): 编译 ES6

    今天介绍webpack怎么编译ES6的各种函数和语法.敲黑板:这是webpack4版本哦, 有一些不同于webpack3的地方. >>> 本节课源码 >>> 所有课 ...

  5. webpack 编译ES6

    虽然js的es6是大势之趋,但很多浏览器还没有完全支持ES6语法,webpack可以进行对es6打包编译 需要安装的包有 npm init // 初始化 npm install babel-loade ...

  6. gulp打包js多个文件夹并压缩混淆,编译ES6语法,及多个import依赖由一个入口打包成一个cdn

    感觉和webpack的步骤差不多 首先安装gulp:参考上一篇 安装完之后 新建一个文件目录起名 在当前目录下打开cmd 执行:npm init 创建package.json文件 然后安装第一个插件g ...

  7. 使用可视化图表对 Webpack 2 的编译与打包进行统计分析

    此文主要对使用可视化图表对 Webpack 2 的编译与打包进行统计分析进行了详细地讲解,供您更加直观地参考. 在之前更新的共十七章节中,我们陆续讲解了 Webpack 2 从配置到打包.压缩优化到调 ...

  8. webpack+react+redux+es6开发模式---续

    一.前言 之前介绍了webpack+react+redux+es6开发模式 ,这个项目对于一个独立的功能节点来说是没有问题的.假如伴随着源源不断的需求,前段项目会涌现出更多的功能节点,需要独立部署运行 ...

  9. webpack模块化管理和打包工具

    Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的 ...

随机推荐

  1. DEVIL MAY CRY V:《鬼泣5》

    “又是一个带孝子的故事”

  2. Github无法访问的解决办法

    #github 192.30.253.113 github.com 192.30.253.113 github.com 192.30.253.118 gist.github.com 192.30.25 ...

  3. 使用Ajax时[object%20object] 报错的解决方案

    踩坑经过 最近初学Ajax,当我想把Ajax应用到自己项目中的时候,没有达到理想的效果,还报了如下错误: 点击图中报错,产生报错页面如下: 当时写的Ajax如下: // 提交修改密码表单 $(&quo ...

  4. C#开发OPC客户端

    第一个随笔,使用了OPEN Live Write,作为客户端.最近使用c#开发一个小软件,主要功能是OPC客户端.以后会开发各类别的协议,作为,协议的转发栈. 因为我本人是搞自动化的,所以搞自动化小伙 ...

  5. maven 3.6.3 安装及配置

    1.下载 下载地址:http://maven.apache.org/download.cgi 2.配置环境变量 解压压缩包到磁盘. 注意:各种系统配置环境变量位置不一样,已windows10为例. 我 ...

  6. 剑指offer-面试题32-从上到下打印二叉树-二叉树遍历

    /* 题目: 按层自上向下打印二叉树. */ /* 思路: 使用队列,将节点压入队列中,再弹出来,压入其左右子节点,循环,直到栈为空. */ #include<iostream> #inc ...

  7. maven的核心概念——生命周期

    第十一章生命周期 11.1 什么是Maven的生命周期 ●Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了. ●Maven有三套相互独立的生命周期, ...

  8. Wannafly Winter Camp 2020 Day 7A 序列 - 树状数组

    给定一个全排列,对于它的每一个子序列 \(s[1..p]\),对于每一个 \(i \in [1,p-1]\),给 \(s[i],s[i+1]\) 间的每一个值对应的桶 \(+1\),求最终每个桶的值. ...

  9. Wannafly Winter Camp 2020 Day 6D 递增递增 - dp,组合数学

    给定两个常为 \(n\) 的序列 \(l_i,r_i\),问夹在它们之间 ( \(\forall i, l_i \leq a_i \leq r_i\) ) 的不降序列的元素总和. Solution 先 ...

  10. IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年,持续更新~)

    申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 注意 本教程适用于 IntelliJ IDEA 所有版本,请放心食用~ ...