注意:本文全部依赖包是目前最新版本的css
如今不少开发朋友对于使用webapck
、babel
搭建开发环境已经不陌生,但不多去系统性的了解项目依赖。html
本文从环境依赖包提及,让你对本身的开发环境有更深的了解。node
为了简单,咱们将依赖分个类:Babel相关🔥
、Webpack相关🔥
、可选的依赖包
。
注意:带🔥 是指必需的依赖, 下面咱们一个一个来讲。react
要使用最新的ES6+
语法,必须少不了Babel
转码,那么要搭建一个彻底体的环境,应该使用哪些依赖呢?webpack
首先,咱们安装最核心的依赖: @babel/cli
、@babel/core
、@babel/polyfill
、@babel/register
、core-js
git
下面是他们的一些简单解释:github
{ /* Babel 自带了一个内置的 CLI 命令行工具,可经过命令行编译文件。 */ "@babel/cli": "^7.4.3", /* 看到`core`就知道它是`babel`的核心,一些转码操做都是基于它完成的, 因此它是必须的依赖。 */ "@babel/core": "^7.4.3", /* Babel默认只转换新的JavaScript语法,可是不转换新的API,好比 `Iterator`、`Generator`、`Set`、`Maps`、`Proxy`、`Reflect`、 `Symbol`、`Promise` 等全局对象,以及一些定义在全局对象上的方法(比 如 `Object.assign` )都不会转码。而`@babel/polyfill`就能够作到。 */ "@babel/polyfill": "^7.4.3", /* 让webpack.config.babel.js也支持ES6语法 */ "@babel/register": "^7.4.0", /* 通俗说就是动态polyfill,它能够动态加载须要的新API,具体能够看https://github.com/zloirock/core-js#readme */ "core-js": "3", }
下面咱们安装必需的preset和plugin:@babel/preset-env
、@babel/plugin-proposal-class-properties
、@babel/plugin-proposal-decorators
、@babel/plugin-proposal-object-rest-spread
、@babel/plugin-syntax-dynamic-import
web
下面是它们的一些解释:typescript
{ /* 根据指定环境来转码,这个不用说,必装 */ "@babel/preset-env": "^7.4.3", /* 对class中属性初始化语法、static等语法进行处理 */ "@babel/plugin-proposal-class-properties": "^7.4.0", /* 装饰器语法处理 */ "@babel/plugin-proposal-decorators": "^7.4.0", /* 对象rest、spread语法处理 */ "@babel/plugin-proposal-object-rest-spread": "^7.4.3", /* import()语法处理 */ "@babel/plugin-syntax-dynamic-import": "^7.2.0", }
安装好了以上preset和plugins,咱们须要新建一个.babelrc
文件来使用它们:npm
{ "presets": [ [ "@babel/env", { "useBuiltIns": "usage", //若是useBuiltIns选项为usage,则要申明corejs的版本,这也是为何要安装core-js的缘由 "corejs": "3", "loose": true } ], "@babel/typescript", //若是你的环境有typescript,记得安装它 "@babel/react" //若是你使用了react,也要记得安装哦 ], "plugins": [ [ "@babel/plugin-proposal-decorators", { "legacy": true } ], [ "@babel/proposal-class-properties", { "loose": true } ], "@babel/proposal-object-rest-spread", "@babel/plugin-syntax-dynamic-import" ] }
以上咱们对于ES6+
最新语法的转码已经彻底没有问题了,下面咱们开始说说Webpack
有哪些必须要安装的依赖
上面的Babel
转码已经配置完成。但咱们要使用它们,还要依靠webpack
来告诉咱们须要转码的项目入口以及在转码过程当中须要的配置(好比loader)。
既然须要webpack,那么咱们安装webapck以及它必需的依赖包:webpack
、webpack-cli
、webpack-dev-server
、babel-loader
、html-webpack-plugin
安装完成后咱们新建webpack.config.babel.js
,而后咱们来配置一下:
import webpack from 'webpack'; import path from 'path'; import HtmlWebpackPlugin from 'html-webpack-plugin'; export default { mode: 'development', entry: { app: path.resolve(__dirname, '../src/index.tsx') }, devtool: 'cheap-module-source-map', output: { path: path.resolve(__dirname, '../build'), filename: 'bundle-[name]-[hash].js', chunkFilename: 'chunk-[name]-[hash].js' }, resolve: { extensions: ['.tsx', '.ts', '.js', '.less', '.json'], modules: ['node_modules'] }, module: { rules: [ { test: /\.(ts|js)x?$/, exclude: /node_modules/, use: [ { loader: 'babel-loader' } ] } ] }, plugins: [ new HtmlWebpackPlugin({ template: path.resolve(__dirname, '../src/index.ejs'), templateParameters: { title: 'test' } }) ], devServer: { port: 8080, host: 'localhost', disableHostCheck: true } };
细心的人看出来,上面的配置用的是ES6
的写法,要作到这点须要知足:
webpack.config.babel.js
@babel/register
这个咱们前面已经安装了tips: 这里我使用的是ejs
做为html
的模板。
到这里,必需的依赖包已经安装完成了,下面的可选依赖是根据你们项目的具体状况去安装,好比样式、图片、字体、css压缩配置等等...
这里我推荐几个好用的依赖包:
{ /* 将CSS提取为独立的文件的插件,对每一个包含css的js文件都会建立一个CSS文件,支持按需加载css和sourceMap */ "mini-css-extract-plugin": "^0.6.0", /* css压缩 */ "optimize-css-assets-webpack-plugin": "^5.0.1", /* 对打包的js进行压缩处理的webapck插件 */ "terser-webpack-plugin": "^1.2.3", /* 多进程处理打包,加快打包速度 */ "thread-loader": "^2.1.2", /* webpack打包进度条 */ "webpackbar": "^3.2.0" }
至于webpack里的各类loader,你们根据本身的项目去安装吧。
就说到这里啦,若是你有好用的npm包,欢迎推荐~