应用webpack构建实在的react工程

进入我的项目文件夹,初始化我的项目

cd reaact-demonpm init -y

装置依赖

装置react

npm install react react-dom此时package.json中应该有react和react-dom

装置webpack

-d代表装置在开发环境中npm install webpack webpack-cli -d

此时webpack会被装置在node_modules中
间接执行webpack会报错,须要进入node_modules文件夹中找到webpack才能够执行
也能够的通过-g的形式全局装置webpack

npm install webpack webpack-cli -gwebpack -v呈现版本号即为装置胜利

初始化我的项目文件内容

新建src文件夹,模仿App.jsx,index.html,index.jsx子文件

<!-- index.html -->  <div id="app"></div>
  import App from './App.jsx'
// App.jsx  import React from 'react'  import ReactDom from 'react-dom'  const App = () => {    return (      <div>        <h1>webpack测试</h1>      </div>    )  }  export default App  ReactDom.render(<App/>, document.getElementById('app'))

通过webpack应用babel编译我的项目文件

简略地应用babel编译一个文件

装置babel

npm install @babel/core @babel/cli -d

装置babel编译规定

npm install @babel/preset-env

运行babel,编译文件,测试将ES6编译为ES5

// test.js[1,2,3].map((item)  => {  console.log(item)})

运行babel命令

babel test.js --presets=@babel/preset-env<!-- 输入后果 -->"use strict"[1, 2, 3].map(function (item) {  console.log(item)})ES6曾经转化为了ES5

配置babel的办法

能够在package.json里间接对babel进行配置
也能够在根目录新建一个.babelrc的文件
.babelrc的优先级最高,babel在编译的时候会优先查找.babelrc文件
配置内容的写法雷同 都是json格局

// package.json or .babelrc{  "babel": {    "presets": ["@babel/presets-env"]    // 规定: [规定内容]    // 指定babel编译规定  }}

在webpack中将babel作为laoder应用

装置须要的依赖和规定

npm install babel-loadernpm install @babel/preset-env @babel/preset-reactnpm install html-webpack-plugin -d
const HtmlWebPackPlugin = require('html-webpack-plugin')const path = require('path')module.exports = {  // 规定webpack读取文件时的后缀  resolve: {    extensions: ['.wasm', '.mjs', '.js', '.jsx', '.json']  },  // 入口文件  entry: path.resolve(__dirname, 'src/index.jsx'),  // 编译文件  module: {    rules: [      {        // 应用正则匹配js或jsx文件        test : /\.jsx?/,        // 排除node_modules文件夹        exclude: /node_modules/,        use: {          loader: 'babel-loader',          options: {            // 不通过babelrc            babelrc: false,            // 规定            presets: [              // 本义jsx              require.resolve('@babel/preset-react'),              // 本义ES6              // modules代表模块化计划的指定,是否把import作为模块编译              [require.resolve('@babel/preset-env', { modules: false })]            ],            // 是否将编译内容缓存            cacheDirectory: true          }        }      }    ]  },  plugins: [    new HtmlWebPackPlugin({      template: path.resolve(__dirname, 'src/index.html'),      filename: 'index.html'    })  ]}

开始打包文件

webpack --mode development开发环境下