>

美洲杯在线投注_2019美洲杯外围投注[投注官网]

热门关键词: 美洲杯在线投注,2019美洲杯外围投注[投注官网]

Webpack 学(cai【美洲杯在线投注】)习(keng)之路

- 编辑:美洲杯在线投注 -

Webpack 学(cai【美洲杯在线投注】)习(keng)之路

webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高。本系列是笔者自己的学习记录,比较基础,希望通过问题 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法。(本篇中的参数配置及使用方式均基于webpack4.0版本

webpack

美洲杯在线投注 1

前言

  • WebPack 是什么?

WebPack 是什么,WebPack 可以看做是模块打包机:它做的事情是,分析你的项目结构,找到 JavaScript 模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript 等),并将其转换和打包为合适的格式供浏览器使用。

  • WebPack 可以用来做什么?

我们都知道,前端技术不断发展,已有的 htmljscss 等基础的技术已经不能满足寻(yue)求(lai)捷(yue)径(lan)的程序员群体了,于是 jsxlesssass,以及有利于模块化开发的 AMDCommonJSES2015 import 等利于完成项目的方案被一个个的提了出来并得以采用,但是这些方案并不能直接被浏览器识别支持,因此与这些方案一同提出的往往会有各种转换工具。

  当我们在项目中运用了 jsxlesssass 等工具时,往往需要使用 babel 以及其他的转换工具将其转换为 jscss 等浏览器识别的样式。当一个项目比较复杂时,这个任务量无疑是庞大的,更不要说当代码体积过大时我们还需要对代码进行压缩,优化,分割,整个项目完成下来耗费的精力和时间想一想都觉得可怕。

  于是,webpack 走进了我们的视野。它的理念是一切皆模块,将所有的文件都当做模块处理(需要注意的是,在 webpack 中,文件是模块,但模块不一定是文件)。我们在 webpack 可以使用各种各样的 loader,用以转换各种不同类型的文件,也可以使用各种各样的插件plugin,对我们体积庞大的项目代码进行优化,分割,压缩,提取等。

  • WebPack和别的打包工具如Grunt以及Gulp的区别在哪里?

Gulp / Grunt 是一种工具,能够优化前端工作流程。比如自动刷新页面、雪碧图、压缩 css、js、编译 less 等等,但是这些操作都需要在gulp的配置文件中详细设置。
  webpack 是预编译的,你在本地直接写 JS,不管是 AMD / CMD / ES6 风格的模块化,它都能认识,不需要另外再在浏览器中加载解释器,它还可以只通过一个文件入口自动寻找其依赖的所有模块,包括文件模块,编译成一个或多个浏览器认识的 JS,还可以通过插件plugin对生成的js代码进行各种优化,这些操作只需要在配置文件中设置用得到的loader或者plugin就可以了,不用告诉webpack具体怎样操作。
  两者功能有重合部分,如压缩,合并等,但是各有优势,可以结合使用

  综上:
    1. gulp/grunt 是工具链,构建工具,自动化,提高效率用。
    2. webpack 是文件打包工具,模块化识别,编译模块代码,优化代码方案用。

一. CSS文件基本处理需求

假设项目中的CSS文件均采用预编译语言编写,那么在打包中需要处理的基本问题包括:

  • 预编译语言转换
  • 样式文件挂载方式选择
  • 代码优化(合并及压缩)
  • 去除或保留指定格式的注释
  • 资源定位路径的转换
  • 响应式布局单位转换【可选】
  • 模块化【可选】
  • 处理浏览器兼容【可选】

本文结构:

本文将通过以下十七部分介绍webpack使用方法:
1. webpack环境构建
2. webpack打包ES6文件
3. 引入webpack配置文件
4. webpack-dev-server
5. Source Maps
6. 编译器
7. webpack打包jsx文件
8. webpack打包css文件
9. webpack打包img文件
10. 插件
11. BannerPlugin插件
12. HtmlWebpackPlugin插件
13. HMR插件
14. BundleAnalyzerPlugin插件
15. ExtractTextPlugin插件
16. CommonsChunkPlugin插件
17. UglifyJsPlugin插件

二. 解决方案的升级

  • 旧的解决方案预编译语言 命名方法论

    在不使用构建工具的时代,开发者使用预编译语言来实现变量定义,选择器嵌套等一些刚需,再使用函数功能来实现一些更为复杂的需求,例如编写简单的@mixin px2rem( )函数来将开发中使用的px单位转换为rem单位,达到移动端自适应的目的,或是编写一些处理兼容性的函数来处理浏览器兼容性。

    命名的方法论非常多,最为流行的当属BEM,也就是采用**block__Element-Modifier**这样的命名方式来进行模块划分,还有提倡碎片化样式的Aotm-CSS及面向对象的OOCSS等,都是一种命名方法论,也意味着没有硬性的检测和预防措施。

  • 新的解决方案预编译语言 构建工具 BEM ACSS全局样式 CSSModule组件样式 POSTCSS

    预编译语言的使用基本不变,但现代化开发中已经不再需要通过预定义函数来解决单位转换或是兼容性的问题。首先,构建工具可以通过自动化检测将预编译语言转换为CSS,基于现代化构建工具的CSS-Module功能,可以通过特定的语法解决CSS模块化的问题,而基于POSTCSS实现的autoprefixer插件,可以依据CanIUse网站提供的浏览器支持度数据实现代码的跨浏览器前缀自动补齐。

    新的方案涉及到很多新的概念,但这并不是简单的炫技,每一个概念都有优点和适用的场合,你需要在恰当的场合使用恰当的技术,最愚蠢的做法就是因为某种技术热门而盲目地要求开发人员在整个项目中使用。

WebPack踩坑之路开始

三. 基本使用方法

一、 webpack环境构建
  1. 首先全局安装 webpack:
    在终端中输入
npm install -g webpack 
  1. 我们可以使用 Webstom 编辑器新建一个空项目 webpackdemo,也可以在桌面新建一个空文件夹,名字自定,然后在里面新建一个 app 文件夹和一个 build 文件夹,在 app 文件夹中创建 main.js文件和Greeter.js文件,在 build 文件夹下创建 index.html 文件。

这里的app文件夹里面就是我们平常写的代码目录,在 webpack 中我们会选择一个主js文件main.js,如果需要其他的 js,css,img文件,可以将其作为模块引入到 main.js 中,而 build 文件夹中存放的是我们使用 webpack 将繁杂的 css 和 js 打包过后生成的文件。

  1. 因为我们是在node环境下打包文件的,因此每一个新的项目都需要一个 package.json 文件,它是一个标准的 npm 说明文件,包含了当前项目依赖的模块,自定义的脚本任务等,创建该文件的方法是进入 webpackdemo 文件夹中,然后在命令窗口输入:npm init,接着一路按回车就可以了。
  1. 我们虽然已经在全局安装了 webpack ,但为了稳妥起见,还是在当前项目中再安装一遍 webpack:
npm install --save-dev webpack

这里的 --save-dev 会将安装的该模块的名称存储在 package.json 文件中的 devDependencies 关键字下,便于我们查看已安装模块信息。

现在我们的项目结构如下图:

项目结构图

3.1 常用插件及功能简述

webpack4.0版本为例来演示CSS模块的处理方式,需要用到的插件及功能如下:

  • style-loader——将处理结束的CSS代码存储在js中,运行时嵌入<style>后挂载至html页面上
  • css-loader——加载器,使webpack可以识别css模块
  • postcss-loader——加载器,下一篇将详细描述
  • sass-loader——加载器,使webpack可以识别scss/sass文件,默认使用node-sass进行编译
  • mini-css-extract-plugin——插件,4.0版本启用的插件,替代原extract-text-webpack-plugin插件,将处理后的CSS代码提取为独立的CSS文件
  • optimize-css-assets-webpack-plugin——插件,实现CSS代码压缩
  • autoprefixer——自动化添加跨浏览器兼容前缀
二、 webpack打包js文件
  1. 我们先在 index.html 中写入代码:
// index.html

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>webpackdom</title>
  </head>
  <body>
    <div id='root'>
    </div>
  <!-- 这里引入的 bundle.js 文件现在还不存在,是将来我们用 webpack 打包出来的文件 -->
    <script src="bundle.js"></script>          
  </body>
</html>

这里引入的 bundle.js 是通过webpack打包后的可以供浏览器识别的 js 文件(现在还不存在)

  1. 接着我们在 Greeter.js 中写入一个函数,用途是在页面中打印出来一句话,然后将该函数作为一个模块导出:
// Greeter.js

module.exports = function() {
  var greet = document.createElement('div');
  greet.textContent = "Hi there and greetings!";
  return greet;
};
  1. 接下来编写我们的 main.js 文件,引入Greeter 文件导出的模块,并将该模块添加到页面的div节点中:
// main.js 

const greeter = require('./Greeter.js');
document.querySelector("#root").appendChild(greeter());
  1. 上述文件编写完毕后,我们可以在命令窗口输入webpack打包命令:
//webpack 打包命令

webpack {entry-file} {output for bundled file}
    {entry-file}                  //入口文件路径,即我们所说的主js文件main.js
    {output for bundled file}     //打包输出的js文件路径

在我们的这个demo中,需要输入的命令是:
    webpack app/main.js build/bundle.js

打包成功界面:

命令行打包

上图显示的 bundle.js 即为 main.jsGreeter.jswebpack 打包成功后生成的文件,打开 index.html ,在浏览器页面会显示如下内容

页面显示结果

至此为止,我们成功的用webpack打包了 Greeter.js 文件。

3.2 webpack的配置

本篇不是webpack教程,在此直接给出带有注释的webpack.config.js的配置以供参考,示例中使用SCSS作为预编译语言,其他预处理语言配置方式基本一致:

const HtmlWebpackPlugin = require('html-webpack-plugin');//用于自动生成html入口文件的插件
const MiniCssExtractPlugin = require("mini-css-extract-plugin");//将CSS代码提取为独立文件的插件
const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin");//CSS模块资源优化插件

module.exports = {
  mode:'development',
  entry:'./main.js',
  output:{
    filename:'main.bundle.js',
    path:__dirname   '/build'
  },
  module: {
    rules: [
      {
        test: /.scss$/,
        exclude: /node_modules/, //排除node_modules文件夹
        use: [{
             loader: MiniCssExtractPlugin.loader//建议生产环境采用此方式解耦CSS文件与js文件
          },{
            loader: 'css-loader',//CSS加载器
            options: {importLoaders: 2}//指定css-loader处理前最多可以经过的loader个数     
          },{
            loader: 'postcss-loader',//承载autoprefixer功能
          },{
            loader: 'sass-loader'//SCSS加载器,webpack默认使用node-sass进行编译
          }
        ]
      }
    ]
  },
  plugins:[
      new HtmlWebpackPlugin(),//生成入口html文件
      new MiniCssExtractPlugin({
        filename: "[name].css"
      })//为抽取出的独立的CSS文件设置配置参数
  ],
  optimization:{
    //对生成的CSS文件进行代码压缩 mode='production'时生效
    minimizer:[
       new OptimizeCssAssetsPlugin()
    ]
  }
}

postcss.config.js的配置较为简单:

module.exports = {
    plugins:[
        require('autoprefixer')
    ]
}

package.json中增加新的参数指定打包需要支持的浏览器类别:

  "browerslist": [
    "last 2 versions",
    "IE 8",
    "UCAndroid"
  ]

编写一段待SCSS代码:

//变量定义
$grey: #1e1e1d;
$yellow: #ffad15;
$offwhite: #f8f8f8;
$darkerwhite: darken($offwhite, 15);//SCSS函数
$baseFontSize:14px;

//循环
@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

//mixin
@mixin px2rem($name, $px){
  #{$name}: $px / $baseFontSize * 1rem;
}

//嵌套
.class3{
    font-weight: bold;
    display:flex;
    &-small{
        color: $offwhite;
        @include px2rem('font-size',14px);
    }
}

//autoprefixer
::placeholder{
    width:10px;
}

可以看到转换后的结果:

美洲杯在线投注 2

提示:代码压缩等优化功能在4.0版本中默认当mode : 'production'时有效。

三、 引入webpack配置文件

我们在进行上述操作时会发现,如果 webpack 每次打包都必须输入那行很长的打包命令,无疑是追求高(xiang)效(tou)率(lan)的我们所不能容忍的,我们希望通过更简单的命令来让 webpack 工作。但是我们命令简单了,就需要另建一个文件来告诉 webpack 它需要怎样工作,这个文件就是webpack配置文件

webpack配置文件作用具体是什么呢?
  它是来告诉 webpack ,你要从哪个文件(入口文件)开始,找和这个文件有关系的所有模块,包含引入的第三方模块和文件模块。
  找到这些模块后,假如这些模块中用了比如 less, sass, es2015, jsx 等浏览器不能直接识别支持的语法,webpack 会自己用我们在配置文件中设置好的转换工具(loader),将这些语法转换成 CSS3 ES5 等浏览器可以直接识别的语法,然后将这些模块和入口文件一起打包成一个文件。
  但是这个文件如果不进行处理,体积会很大。因此在这里 webpack 会引用我们在配置文件中设置的插件(plugin)对生成的文件进行优化,比如分离css,切割代码,分离引入的第三方模块等。

我们先在根目录下创建一个 webpack.config.js ,在里面写入以下代码:

// webpack.config.js

module.exports ={
        entry:__dirname   '/app/main.js',      //入口文件
        output:{
                path: __dirname   '/build',    //输出文件路径
                filename:'bundle.js'           //输出文件名
        }
}

这样我们的一个最基本最简单的webpack配置文件就创建好了,现在我们可以在命令窗口输入webpack,然后回车,

配置文件打包

出现上图内容即为打包成功。

以上我们已经用了两种打包方式,分别是命令行打包和配置文件打包,在这里继续介绍第三种打包方式:命令窗口输入 npm run xxx 引导任务执行。
首先我们进入 package.json 文件,找到 scripts 属性,在下面添加

"xxx":"webpack"        // xxx为个人定义的属性名,可以用 `npm run xxx` 来运行后面的文件

此时 package.json 中的代码如下:

// package.json

{
  "name": "webpackdemo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev":"webpack"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^3.6.0"
  }
}

这里有个坑:JSON 文件中 不能 添加 注释 !!!

接下来我们运行 npm run dev ,如果你在上面加的属性名是,同样会出现以下结果

npm run dev 输出结果

以上,我们引入了 webpack.config.js 配置文件并总结出了三种 webpack 打包:

  • 命令行打包 webpack {entry-file} {output for bundled file}
  • webpack打包 webpack
  • npm run xxx 打包 npm run xxx

推荐使用第二种方式

四. 使用CSS-Modules

项目地址:CSS Modules开源地址

CSS Module在CSS中使用类选择器,其基本原理是将CSS代码中的样式名替换为哈希值,并建立一个json对照表,在js文件中对于属性名选择器的使用均被替换为哈希字符串,以此来解决CSS模块化的问题。

在webpack中使用CSS Modules功能非常简单,只需要在css-loader的配置参数中设置:{modules:true}即可激活模块化功能。

开启模块化功能后再进行打包,可以看到同样的main.css文件变成了如下样子:

美洲杯在线投注 3

而在打包文件中增加了如下片段:

美洲杯在线投注 4

当然CSS Modules的用法远不止如此,更多的信息可以参见上面的项目地址。

四、 webpack-dev-server

本小节我们将介绍一个本地服务器 webpack-dev-server
webpack-dev-server 基于 node.js 构建,可以让浏览器监听我们的代码修改,代码一旦改动并保存,浏览器会立刻自动刷新。
在使用 webpack-dev-server 之前,我们需要先安装它作为项目依赖,在命令窗口输入以下指令:

npm install --save-dev webpack-dev-server

我们若想使用 webpack-dev-server 包括后面要讲的各种 loader 或者 plugin , 都需要在 webpack.config.js 文件中进行配置:

devServer配置选项 功能描述
contentBase 默认webpack-dev-server会为根文件夹提供本地服务器,如果想为另外目录下的文件夹提供服务器,应该在该配置选项中重新设置所在目录
prot 设置默认监听端口,默认为"8080"
inline 设置为true时,当源文件改变时会自动刷新页面
historyApiFallback 在开发单页应用时非常有用,依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html

接下来更新 webpack.config.js 文件

//webpack.config.js

module.exports ={
        entry:__dirname   '/app/main.js',
        output:{
                path: __dirname   '/build',
                filename:'bundle.js'
        },
        //更新部分代码
        devServer: {
                contentBase:"./build",      //本地服务器加载页面所在目录
                historyApiFallback:true,    //不跳转
                inline:true                 //实时刷新
        }

}

package.json 中的 scripts 对象中添加以下命令,用以开启本地服务:

//package.json

"scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "webpack",
    "server": "webpack-dev-server --open"
  }

接下来在命令窗口输入 npm run server 启动服务器,正常情况下会自动在浏览器打开 localhost:8080 ,若没有自动打开可以在浏览器窗口中手动输入。

启动服务成功

然后我们可以在 Greeter.js 中修改一下要输出的内容,保存的同时可以观察到命令窗口中会服务器会自动刷新,同时浏览器窗口会自动刷新html内容。

五. 图解Css-Process-Chain

从上述配置中可以看出,使用预编译器编写的样式文件需要经过一系列loaderplugin才能得到最终的目标文件,它之所以很抽象是因为中间的处理环节对开发者来说是黑箱操作,只看得到输入和输出,笔者结合自己理解绘制了下面的示意图,希望能够帮助你理解css文件在整个webpack打包流程中是如何被处理的(plugins部分尚未进行研究,处理链中暂不涉及)。

美洲杯在线投注 5

五、 Source Maps

我们都知道,打包生成的文件其实可读性是很差的。如果我们在本地编写代码时候不小心写错了,然后打包生成的文件肯定是达不到我们想要的效果,而在生成的文件中查错即找bug是不现实的,我们需要直观明显的显示出错位置,这个时候就需要使用Source Maps 来显示出来我们写的代码出错的位置。
同样,我们需要在 webpack.config.js 中进行配置。

devtool选项 配置结果
source-map 在一个单独的文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包速度;
cheap-module-source-map 在一个单独的文件中生成一个不带列映射的map,不带列映射提高了打包速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便;
eval-source-map 使用eval打包源文件模块,在同一个文件中生成干净的完整的source map。这个选项可以在不影响构建速度的前提下生成完整的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。在开发阶段这是一个非常好的选项,在生产阶段则一定不要启用这个选项;
cheap-module-eval-source-map 这是在打包文件时最快的生成source map的方法,生成的Source Map会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具有相似的缺点;

上述选项由上到下打包速度越来越快,同时负面作用也越来越大,较快的打包速度的后果是对打包后的文件的执行有一定的影响。
中小型的项目推荐使用eval-source-map,大型项目考虑时间成本时可以使用cheap-module-eval-source-map。另外,Source Map 只应该在开发阶段使用,生产阶段记得将该配置其去除

更新webpack.config.js:

//webpack.config.js

module.exports ={
        entry:__dirname   '/app/main.js',
        output:{
                path: __dirname   '/build',
                filename:'bundle.js'
        },

        devServer: {
                contentBase:"./build",
                historyApiFallback:true,
                inline:true
        },
        //更新代码:
        devtool: "eval-source-map"    //配置Source Map 
}
六、 编译器

本小节我们将认识webpack的可以说最为强大的功能之一:编译器(装载器)Loaders

webpack1.x 中是loaders,在webpack2.x中将loaders换为了rules,我们在网上搜到的大多教程都是基于webpack1.x的,和现在使用的webpack2.x有些许出入,不同之处详见:Webpack2 升级指南和特性摘要

听说过webpack的童鞋们肯定都见过loaders这个单词,那么问题来了,loaders是用来做什么的?
大家对webpack可以将那些使用浏览器不能识别支持的各种语法编写的文件打包都有所耳闻,那webpack这种强大的功能是用什么实现的呢?答案就是Loaderswebpack通过各种不同的loader调用外部的脚本或工具,实现对不同类型文件的转换编译处理,例如将sass转换为css,ES6/ES7转换为ES5,React中用到的jsx转换为js等。

同上,我们也需要在配置文件webpack.config.js中的module关键字下配置loaders,即webpack2.x中的rules(后面如果再出现rules即为loaders)。rules是一个数组,里面存放着需要使用的许多loader,每个loader都是一个对象,下面是loader中常用的几个属性:

  • test:一个用以匹配loaders所处理文件的拓展名的正则表达式(必须)
  • loader: loader的名称(必须)
  • include/exclude : 手动添加必须处理的文件(文件夹)/屏蔽不需要处理的文件(文件夹)(可选);
  • query: 为loaders提供额外的设置选项(可选)

在配置loader之前,我们将Greeter.js里的问候消息放在一个单独的JSON文件中,通过合适的配置使Greeter.js可以读取JSON文件中的值,各文件修改后的代码如下:
在app文件夹中创建带有问候信息的JSON文件(命名为config.json)

//config.json

{
  "greetText":"hello webpack!"
}

更新后的Greeter.js

//Greeter.js

//更新内容:
var config = require('./config.json');        //引入上面创建的 config.json 文件
module.exports = function(){                  //将该模块公开,外部其他文件可以调用该模块
        var greet = document.createElement('div');    //创建一个div
        greet.textContent = config.greetText;         //将 config.json 文件中greetText属性中的内容添加到创建的div中
        return greet;                                 //将该div块返回出去
}

webpack1.x 中,json 文件需要在配置文件中单独使用json-loader转换处理,而 webpack2.x 内置了可以处理json的模块,不需要再单独配置。

七、 webpack打包ES6文件

我们继续打包文件,不过这次打包的是``类型文件,需要用到Babel。它是随着ES6,ES7,JSXjs语法的兴起而产生的,作用就是用来将这些目前尚未被浏览器完全支持的语法转换为可以被浏览器识别支持的ES5
Babel包含了几个模块化的包,核心功能在babel-corenpm包中,对于每一个你需要的功能或拓展,你都需要安装单独的包,平时用的最多的是解析ES6babel-preset-es2015包和解析JSXbabel-preset-react包。
所以我们可以将上述的几个 npm 包安装一次性的安装下来:

//npm 一次安装多个依赖模块,模块之间需要用空格隔开
npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

接下来我们在配置文件中配置babel

//webpack.config.js

module.exports ={
    entry:__dirname   '/app/main.js',
    output:{
        path: __dirname   '/build',
        filename:'bundle.js'
    },

    devServer: {
        contentBase:"./build",
        historyApiFallback:true,
        inline:true
    },
    devtool: "eval-source-map",

    //更新内容
    module:{
        rules:[
            {
                test:/(.jsx|.js)$/,   //该正则也可以写作  /.jsx?$/
                use:{
                    loader: "babel-loader",
                    options: {
                        presets:[
                            "es2015","react"
                        ]
                    }
                },
                exclude:/node_modules/
            }
        ]
    }

}

现在用上面的配置我们就可以打包出用 ES6 语法编写的代码了。
下面我们修改代码,将上述文件中的代码改为 ES6 语法的代码,不过这里我们会用到 react,因此先安装ReactReact-DOM,命令如下:

npm install --save-dev react react-dom

然后更新 Greeter.js 代码:

//Greeter.js

//更新内容:
import React, {Component} from 'react';    //引入React组件
import config from './config.json';        

class Greeter extends Component {          //创建class类 
    render(){
        return(
            <div>
                {config.greetText}
            </div>
        );
    }
}
export default Greeter;                   //返回react组件

更新 main.js 代码:

//main.js

import React from 'react';
import {render} from 'react-dom';
import Greeter from './Greeter';

render(<Greeter />,document.getElementById("root"));

更新完毕后我们可以运行打包命令 webpack ,打包成功后再运行 npm run server 启动服务器,服务器会自动在浏览器中打开 html 页面,输出 「 hello webpack! 」:

localhost:8080

Babel的配置:
Babel 可以在配置文件中配置,但是它同时也有特别多特别多的设置选项,虽然可以在 webpack.config.js 文件中设置,但是如果有很多设置选项,webpack.config.js 就会显得很臃肿,因此我们可以把 babel 的设置选项提取出来,单独放在一个名为 .babelrc 的文件中。这里的 babel 的设置选项即为下图中选中的部分:

babel下的设置选项

现在我们就可以提取出相关部分,webpack 会自动调用 .babelrc 中的配置选项,修改代码如下:

//webpack.config.js

module.exports = {
    entry: __dirname   '/app/main.js',
    output: {
        path: __dirname   '/build',
        filename: 'bundle.js'
    },
    devServer: {
        contentBase: "./build",
        historyApiFallback: true,
        inline: true
    },
    devtool: "eval-source-map",
    module: {
        rules: [{
            test: /(.jsx|.js)$/, //该正则也可以写作  /.jsx?$/
            use: {
                loader: "babel-loader",
                //将以下部分代码注掉,该 babel-loader 的options 部分我们将在 .babelrc 中单独设置
                // options: {
                //      presets:[
                //              "es2015","react"
                //      ]
                // }
            },
            exclude: /node_modules/
        }]
    }
}

在该项目的根目录创建 .babelrc 文件

//.babelrc

{
  "presets": ["react","es2015"]
}

该文件中 只能 存放 babel-loader 下的设置选项,其他的loader设置不能在这里写

我们可以先打包,再开启本地服务器,查看是否配置成功。

本文由计算机教程发布,转载请注明来源:Webpack 学(cai【美洲杯在线投注】)习(keng)之路