谈谈webpack与babel(一)

2017-02-24  本文已影响970人  Shannon_JS

一、babel

babel是一个JS编译器,用来转换最新的JS语法,比如把ES6, ES7等语法转化成ES5语法,从而能够在大部分浏览器中运行。像箭头函数,就可以做转换。babel在执行过程中,分三步:先分析(parsing)、再转化、最后生成代码。

但babel只转换语法的话,一些最新的api是不转化的,比如Object.assign, Promise等。所以babel还提供了很多插件,也就是babel-pilofill。安装后,即可支持浏览器运行。babel-pilofill基于core-js和regenerator。但pilofill是引入全部的api支持,如果只用了部分api,可以只引入相应的模块。

babel还可以转换JSX语法,对React支持比较好

最后说明一下babel的presents,presents是指plugins的合集。另外plugins的执行过程是先出现先运行,但presents是先出现后执行。比如:

{
  "plugins": [
    "transform-decorators-legacy",
    "transform-class-properties"
  ]
}

这个是先运行transform-decorators-legacy,后运行transform-class-properties,而

{
  "presets": [
    "es2015",
    "react",
    "stage-2"
  ]
}

是先运行stage-2,最后运行es2015。这样做是为了更好的兼容性。

二、webpack

先提一下webpack已经是第2版了,增加了很多特性。不过我们公司的项目还没来得急更新。下面介绍的也主要基于webpack 2。

简单的说webpack是一个打包工具,打包js文件,css文件,图片,html等等,它可以分析整个项目的文件结构,确认文件之间的依赖,比如一个js文件引入了另一个js文件。在这个过程中可以合成js,压缩,加入hash等,最终生成项目文件。

webpack有几个关键概念:

webpack把所有文件都当成模块(module),但是webpack只懂js,所以loaders起到关键作用。当然plugins也是重要功能。

webpack与babel通常是配合起来使用,一个典型的webpack配置文件如下:

const HtmlWebpackPlugin = require('html-webpack-plugin'); //installed via npm
const webpack = require('webpack'); //to access built-in plugins
const path = require('path');

const config = {
  entry: './path/to/my/entry/file.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'my-first-webpack.bundle.js'
  },
  module: {
    rules: [
      {test: /\.(js|jsx)$/, use: 'babel-loader'}
    ]
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin(),
    new HtmlWebpackPlugin({template: './src/index.html'})
  ]
};

module.exports = config;

几个重要插件介绍:

下一部分,会介绍webpack与babel在实际项目中的运用。

上一篇 下一篇

猜你喜欢

热点阅读