babel只是个翻译,假设a.js 里 import 了 b.js, 对a.js进行转码,只是翻译了a.js,并不会把b.js的内容给读取合并进来, 如果想在最终的某一个js里,包含 a.js,b.js 的代码,那就需要用到打包工具
所以我在这里讲解一下如何使用webpack工具将带有import和export语法的JS文件, 通过打包工具生成所有浏览器都支持的单个JS文件.
1. 下载node.js和webpack
Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。可以说就是服务器端的JS. webpack是一个打包工具, 而它是依赖于node.js运行的.
下载node.js可以通过官网:
具体的安装步骤网上可以搜到很多, 这里不再赘述. 安装完毕后打开node.js自带的命令行工具
这里写图片描述
然后输入如下命令全局安装webpack工具
npm install -g webpack
接着通过命令行工具定位到你的工程文件的根目录下, 再次安装webpack到你的工程中
npm install webpack
2. 编写webpack.config.js文件
在根目录下创建webpack.config.js, 这个文件是用来描述一些要使用webpack工具进行打包的配置信息, 文件内容如下:
这里写图片描述
通过该文件可以使用webpack打包工具, webpack会从import.js进入, 对该文件中的内容进行编译并打包, 最终会在dist目录下生成打包好的文件bundle.js, 编译打包过程中用到的工具在module对象的loaders中声明, 这里使用了babel-loader来对JS文件进行编译(包括从ES6转换为ES5以及打包)
3. 创建import.js
创建一个import.js, 内容如下:
这里写图片描述
在该文件中通过ES6语法import从export.js中引入firstName和lastName变量. 并且通过console.log将引入的两个变量打印到控制台.
4. 创建export.js
这里写图片描述
在该文件中通过ES6语法export将文件中的几个变量作为模块输出给别的文件引用.
5. 创建HTML文件
在HTML文件中直接将webpack最终打包生成的bundle.js文件引入即可, 因为通过webpack工具已经将export.js和import.js的所有内容都打包到一个文件bundle.js中了, 因此在HTML文件中引入该文件即可以将两个JS文件中的代码都执行.
这里写图片描述
6. 配置.babelrc文件
在工程文件的根目录下创建一个.babelrc文件(注意前面有个点), 这个文件是用来描述我要根据什么样的规则、或者是将JS文件编译成什么版本的文件(比如说ES5). 该文件的内容如下:
这里写图片描述
7. 下载相关依赖模块
方式1: 可以像下面这样, 直接在项目根目录下创建一个package.json文件, 并且在文件中指定devDependencies对象, 在该对象中写上我编译及打包中所要使用到的依赖模块, 图片中的webpack就是用于打包的工具, 而其他的以babel开头的选项都是编译JS文件并打包所需要用到的依赖模块.
这里写图片描述
创建好package.json文件后, 在命令行中输入
npm install
npm工具就会根据该文件中devDependencies选项下载对应的依赖模块.
方式2(推荐): Ctrl+R打开运行, 然后输入cmd打开命令行工具, 通过命令行工具一个个安装, 这样可以直接通过npm去下载依赖模块最新的稳定的版本, 同时也不需要自己去记这些模块的版本号
npm install babelnpm install babel-clinpm install babel-corenpm install babel-loadernpm install babel-preset-es2015
8. 使用 webpack打包
使用命令行工具定位到项目的根目录下, 然后输入如下指令
webpack
等待一会儿就会发现工程文件的目录下多了一个dist文件夹, 里面放着的就是打包好了的bundle.js文件, 在HTML文件中通过下面的代码引入js文件
然后在浏览器上运行html文件, 使用F12打开开发者工具, 就可以看到console选项中输出两行记录”Micheal”, “Jackson”
使用webpack编译打包react是非常便捷的。这也是人们常用的一种方式。但是在使用过程中,一定要注意一个细节,那就是webpack和babel-loader的安装位置。react安装当然,使用react必须先安装react和react-dom,其安装方式很简单(前提是我们必须安装有npm)。#npminstallreactreact-dom–savereact安装就这样简单,其实react和react-dom就是相当于js类库。但是我们需要解析器来解析react的语法。react解析器babel安装babel安装的位置是我们这篇文章的目的。babel有两种安装的位置:一种是全局安装,一种是本地安装——也就是安装在项目目录下的node_modules下。#npminstallbabel-corebabel-loaderbabel-preset-react–save-dev//本地安装#npminstallbabel-corebabel-loaderbabel-preset-react–g//全局安装一般情况下我们选择本地安装,这样便于管理。打包工具webpack的安装同样,webpack的安装位置也是这篇文章描述的所要注意的点。当然,它也有两种安装的位置:全局安装和本地安装。#npminstallwebpack–save-dev//本地安装#npminstallwebpack–g//全局安装如果选择本地安装,那么在使用的时候较麻烦一些,我们需要在命令前加上路径。所以一般情况下都是全局安装,这样就可以在任意位置直接使用。这里我们选择全局安装。这样才能出现我们将要说的问题。webpack配置文件编写安装完webpack以后,下面来编写webpack配置文件webpack.config.js。这里我不写全部,只写加载loader部分。代码一module:{loaders:[{test:/\.js$/,loader:'babel',query:{presets:['react']}}]}编译过程中出现的错误好了,到了关键的地方了。现在我们整个系统的配置是这样的:babel安装到本地,webpack安装到全局位置,webpack配置文件如代码一所示。接下来我们就要编译打包我们的项目。#webpack执行该命令以后,你会发现出现如下的错误:ERRORin(webpack)/~/node-libs-browser/~/process/browser.jsModulebuildfailed:Error:Couldn'tfindpreset"react"relativetodirectory"/node/lib/node_modules/webpack/node_modules/node-libs-browser/node_modules/process"……这也就是说找不到babel-preset-react。好了,说了这么多终于在这里引出了我们将要讨论的问题(这里大家不要嫌我啰嗦,为什么出现这种问题,其原因总要弄清楚。什么样的配置会出现这种问题,了解以后才容易上手解决)。解决问题的方式出现上述问题以后,我们有这样三种方式可以解决。方式一要解决这个问题很简单。我们知道,出现这个问题是因为bable和webpack安装的位置不同,所以找不到babel-preset-react。因为在配置文件中有这样一段代码。query:{presets:['react']}好了,既然知道是安装位置不同,那我们可以将babel安装在全局位置,这样这个问题不就解决了吗。#npmremovebabel-corebabel-loaderbabel-preset-react–save-dev//首先移除原先安装的babel#npminstallbabel-corebabel-loaderbabel-preset-react–g//全局安装没错,问题解决了。但是我们不推荐使用这种方式。因为这样不便于管理,所以还是使用其他的方式。方式二此种方式和方式一大同小异。方式一是改变babel的安装位置,而这里是改变webpack的安装位置。原先webpack是安装到全局位置的,所以找不到安装到本地项目目录下的babel-preset-react。因此我们可以改变webpack的位置。#npmremovewebpack–g//移除原先的webpack#npminstallwebpack–save-dev//将webpack安装到本地位置——也就是项目目录下的node_modules中#ln–s/项目根目录/node_modules/webpack/bin/webpack.js/usr/bin/webpack//为了使用webpack方便,在这里我们在/usr/bin目录下建立软连接(也就是快捷方式)//这样我们就可以在任意位置直接使用webpack命令了。此时我们已经改变了webpack的安装位置。现在二者同在项目目录下安装。所以可以正确编译了。此种方式较方式一,我个人比较推荐这种方式,这样比较方便管理。但是,这种方式也不是没有弊端。如果我们有多个项目,那我们就需要在每个项目下都安装webpack,那岂不是很麻烦。所以这种方式也不是很好。方式三该方式应该说是最值得推荐的,因为不需要改变webpack和babel的安装位置。webpack还是在全局位置,babel还是在本地项目位置下。我们需要做的就是修改webpack的配置文件,在代码一的基础上添加一句代码。代码二module:{loaders:[{test:/\.js$/,loader:'babel',exclude:/node_modules/,query:{presets:['react']}}]}WebStorm 2018.3. Learn more. on JetBrains.
Komodo IDE 11.1.1. Learn more. on ActiveState.
NetBeans 10.0. Learn more. on Apache Foundation.
Visual Studio 2017. Learn more. on Microsoft.
Visual Studio Code 1.30. Learn more. on Microsoft.
Eclipse 2018 with JavaScript Development Tools. Learn more.
跨平台常用 visual studio code,免费。
好用的话,应该webstorm最好。