react+webpack4.0环境搭建

环境:

    node:  10.6.0

    react: ^16.4.1

    webpack: ^4.6.1

 

  • 安装node

  • 执行npm init,新建一个项目,这里是myBlog

  • 执行npm install webpack webpack-cli webpack-merge --save-dev

  • 如需安装webpack-dev-server, 同时安装webpack-dev-server

  • 这里解释下dependencies和devDependencies的区别, 通过—save安装的包会放在dependencies下面,通过—save-dev安装的包会放在devDependencies下面,两者当你在项目下执行npm install的时候都会安装,区别是在使用npm发布后,其他人使用npm install安装你的包时,只会安装dependencies下的依赖。对于package.json中项的解释,详见npm的文档。

  • 执行npm install react react-dom --save安装react

  • 在项目目录下新建文件夹:config,dist和src(Mac下touch config dist src

  • config里面放项目的配置文件,包括我们接下来就要写的webpack的配置文件,此外还可以放数据库的配置文件,端口配置等等

  • Dist作为webpack的打包出口路径,下面放网页的index.html以及webpack打包出来的文件

  • src作为webpack的入口路径,下面放webpack入口文件,这里我命名为index.js

  • 在src下面新建index.js, 先在里面放简单的一句话:document.write(“hello world”); 用于测试webpack

  • 下面就是开始写webpack的配置文件,这里我写了三个文件,一个是webpack.base.js作为配置的基本文件,和webpack.config.js作为生产环境的配置,还有webpack.dev.js作为开发环境的配置,配置如下:

 

webpack.base.js

const path = require("path");



module.exports = {

    //入口文件

    entry: {

        main: './src/index.js'

    },

    //出口文件

    output: {

        path: path.resolve(__dirname, '../dist'),

        filename: "bundle.js"

    },

    module: {},

    plugins: []

};

webpack.config.js

const merge = require('webpack-merge');//webpack配置文件合并

const baseConfig = require("./webpack.base.js");//基础配置



let config = {

    mode: 'production'

};



module.exports = merge(baseConfig, config);

 

webpack.dev.js

const path = require("path");

const merge = require('webpack-merge');//webpack配置文件合并

const baseConfig = require("./webpack.base.js");//基础配置



let config = {

    mode: 'development',

    devServer: {

        contentBase: path.resolve(__dirname, '../dist'),

        host: 'localhost',

        compress: true,

        port: 8888

    }

};



module.exports = merge(baseConfig, config);

 

  • 在dist目录下新建index.html, 内容如下

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

<div id=“root"></div>

<script src="./bundle.js"></script>

</body>

</html>

 

  • 然后在package.json中配置scripts,添加脚本:

"dev": "webpack-dev-server --config=config/webpack.dev.js",

"build": "webpack --config=config/webpack.config.js"

  • 然后执行npm run build, 再在浏览器中打开dist/index.html 或者执行npm run dev, 在浏览器中打开localhost:8888, 出现hello world即代表成功.

  • 接下来就是配置react, 这里我们使用babel进行打包,使我们在写代码的时候可以使用es6的语法. 在终端下运行 npm install babel-cli babel-core babel-loader babel-preset-env babel-preset-react babel-plugin-transform-class-properties --save-dev

  • 修改我们的index.js, 使用react风格, 完整内容如下:

import React from 'react'

import ReactDOM from 'react-dom'



class App extends React.Component{

    getText = () => {

        return "hello world";

    }



    render(){

        return (

            <h1>{this.getText()}</h1>

        )

    }

}



ReactDOM.render(

    <App />,

    document.getElementById('root')

);

  • 此时在跑是会报错的,因为默认是不支持这种语法,需要使用babel进行转换,在webpack.base.js中的module下添加配置数据,如下:

module: {

    rules: [

        {

            test: /\.js$/,

            exclude: /node_modules/,

            loader: "babel-loader",

            options: {

                presets: [["env"],["react"]],

                plugins: [

                    "transform-class-properties"

                ]

            }

        }

    ]

},

注意:    这里的意思是除了node_modules目录下,项目里所有的后缀为.js的文件都使用babel-loader进行转换, 其中test是一个正则表达式,如果你使用了后缀为jsx的格式, 则这里需要修改正则. Options中是babel的配置,也可以在项目根目录下新建.babelrc文件,然后将其放在.babelrc文件中. 具体的配置根据babel的文档和自己的需求进行修改, 这里简单介绍下我使用的配置: env是babel建议用来取代babel-preset-es2016和2015的, 能够支持es6和es5的语法, react能够支持jsx的语法, transform-class-properties是用来支持类中方法使用箭头函数的.

  • 然后再运行npm run buildnpm run dev进行打包即可

    

    至此我们便搭建起了一个基本的react+webpack4的项目, 在后续的项目中会陆续增加相应的配置, 以上一个将基本配置完成的项目代码可以在我的github项目: https://github.com/wushuangYK/myBlog.git 中的base分支中找到, 你也可以在其他分支上关注该项目的后续开发进度.

    feel free to contact me:2278254874@qq.com.

最后附上参考链接:

  1. Npm: https://docs.npmjs.com

  2. Webpack: https://www.webpackjs.com/concepts

  3. React: https://reactjs.org/docs/getting-started.html

  4. Babel: http://babeljs.io/docs/en


版权声明:本文为qq_27829189原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。