进修从零开始搭建React脚手架

写在前面

预备进修一下react和webpack相干的东西,官方的脚手架看起来太烦琐,所以盘算本身来搭建一个,参考了这个文档从零搭建React百口桶框架教程;步骤上都差不多

第一步,依靠总览

完成到我如今半成品的过程当中,现在完成开辟形式的相干操纵,添加了babel,less,antd按需加载的田地。整体的package.json状况以下:

        {
            "name": "myreact",
            "version": "1.0.0",
            "description": "test react",
            "main": "index.js",
            "scripts": {
                "test": "echo \"Error: no test specified\" && exit 1",
                "dev": "webpack-dev-server --config config/webpack.base.config.js --hot --mode development"
            },
            "keywords": [
                "test",
                "react"
            ],
            "author": "xxxx",
            "license": "ISC",
            "devDependencies": {
                "autoprefixer": "^9.1.2",
                "babel-core": "^6.26.3",
                "babel-loader": "^7.1.5",
                "babel-plugin-import": "^1.8.0",
                "babel-preset-es2015": "^6.24.1",
                "babel-preset-react": "^6.24.1",
                "babel-preset-stage-0": "^6.24.1",
                "css-loader": "^1.0.0",
                "html-webpack-plugin": "^3.2.0",
                "less": "^3.8.1",
                "less-loader": "^4.1.0",
                "postcss-import": "^12.0.0",
                "postcss-loader": "^3.0.0",
                "react-hot-loader": "^4.3.4",
                "style-loader": "^0.22.1",
                "webpack": "^4.16.5",
                "webpack-cli": "^3.1.0",
                "webpack-dev-server": "^3.1.5"
            },
            "dependencies": {
                "antd": "^3.8.2",
                "react": "^16.4.2",
                "react-dom": "^16.4.2",
                "react-router-dom": "^4.3.1"
            }
        }

临时做到这些依靠,须要指出的是,webpack4和之前的版本能够有差异(不一定,或许是我没有注意到)假如须要在scrpit属性中设置,运用cli的体式格局运转,就须要装置webpack-cli,须要行内命令行的体式格局运转,就须要装置webpack-command,固然,一同装置应当也没有什么问题。这里是和教程内里设置的不一样的处所。
然后,webpack4须要指明形式production|development,所以我在dev中运用了--mode development这个参数。这也是教程中没有提到的部份。

关于babel设置

babel的相干依靠,有babel-core,babel-loader,babel-preset-es2015,babel-preset-react,babel-preset-stage-0,这个是babel的相干依靠,等等,有人能够会看到babel-plugin-import没有提到,这个模块的用处是为了antd的按需加载的。能够看看细致的babelrc文件:

{
    "presets": [
      "es2015",
      "react",
      "stage-0"
    ],
    "plugins": [
        "react-hot-loader/babel",
        ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
      ]
  }

以上是babel的设置,preset的值就是那三个模块,至于作用,es2015是为了处置惩罚es6语法的,react是为了处置惩罚jsx语法的,stage-0是为了支撑新特征的。
至于插件的设置,react-hot-loader/babel是为了热更新,不丧失状况,这点教程中已说到了。下边的import这个,就是上边提到的babel-plugin-import的设置,也是antd的按需加载,官方引荐的设置。
还须要提到一点,这里能够一些新特征照样支撑不够,比方async/await语法,能够须要再装置babel-plugin-transform-runtime这个模块,babelrc文件的plugins还须要设置"transform-runtime"这个插件进去,以支撑新特征。
依靠相干的就说到这里。

webpack的设置

我这边直接在根目次下的config目次创建了webpack.dev.config.js,详细的设置以下:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
 
    /*进口*/
    entry: ['react-hot-loader/patch',path.join(__dirname, '../src/index.js')],
    
    /*输出到dist文件夹,输出文件名字为bundle.js*/
    output: {
        path: path.join(__dirname, '../dist'),
        filename: 'bundle.js'
    },
    devServer: {
        contentBase: path.join(__dirname, '../dist'),
        historyApiFallback: true
    },
    module: {
        rules: [{
            test: /\.js[x]?$/,
            use: ['babel-loader?cacheDirectory=true'],
            include: path.join(__dirname, '../src')
        },{
            test: /\.css$/,
            use: ['style-loader','css-loader','postcss-loader'],
            
        },
        {
            test: /\.less$/,
            use:[ 'style-loader',
                {loader: 'css-loader',options:{importLoaders:1}}, 
             'less-loader'],
           
        }]
    },
    plugins:[new HtmlWebpackPlugin({
        title:'react测试',
        template:'./src/index.html',
        filename:'./dist/index.html'
    })],
    devtool: 'inline-source-map',
    resolve:{
        alias: {
            "@":path.join(__dirname, '../src/')
        }
    }

};

这边的设置就没啥说的,基本上loader的设置,现在完成js(x)的处置惩罚,css/less的处置惩罚,和其他的通例cli设置,少了url-loader,file-loader,代码支解这些功用。

结束

差不多设置就是如许,很大略,功用也不完全,须要完成的事情另有许多。不过本身着手,饱食暖衣……
项目的github地点 diy-react-cli迎接列位来串门哟!
这个项目还在不停的完美中。

    原文作者:随风飘远
    原文地址: https://segmentfault.com/a/1190000016112984
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞