资讯专栏INFORMATION COLUMN

学习从零开始搭建React脚手架

cod7ce / 2217人阅读

摘要:写在前面准备学习一下和相关的东西,官方的脚手架看起来太繁琐,所以打算自己来搭建一个,参考了这个文档从零搭建全家桶框架教程步骤上都差不多第一步,依赖总览完成到我现在半成品的过程中,目前完成开发模式的相关操作,添加了按需加载的地步。

写在前面

准备学习一下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://www.ucloud.cn/yun/96926.html

相关文章

  • 前端之从零开始系列

    摘要:只有动手,你才能真的理解作者的构思的巧妙只有动手,你才能真正掌握一门技术持续更新中项目地址求求求源码系列跟一起学如何写函数库中高级前端面试手写代码无敌秘籍如何用不到行代码写一款属于自己的类库原理讲解实现一个对象遵循规范实战手摸手,带你用撸 Do it yourself!!! 只有动手,你才能真的理解作者的构思的巧妙 只有动手,你才能真正掌握一门技术 持续更新中…… 项目地址 https...

    Youngdze 评论0 收藏0
  • 手把手教你从零搭建react局部热加载环境

    摘要:有没有办法实现就局部刷新呢当然是有第十步执行为了实现局部热加载,我们需要添加插件。 前言 用了3个多月的vue自认为已经是一名合格的vue框架api搬运工,对于vue的api使用到达了一定瓶颈,无奈水平有限,每每深入底层观赏源码时候都迷失了自己。 遂决定再找个框架学习学习看看能否突破思维局限,加上本人早已对React、RN技术垂涎已久,于是决定找找教程来学习。无奈第一步就卡在了环境搭...

    quietin 评论0 收藏0
  • 通过create-react-app从零搭建react环境

    摘要:通过文件可以对图标名称等信息进行配置。注意,注册的只在生产环境中生效,并且该功能只有在下才能有效果该文件是过滤文件配置该文件是描述文件定义了项目所需要的各种模块,以及项目的配置信息比如名称版本许可证等元数据。 一、 快速开始: 全局安装脚手架: $ npm install -g create-react-app 通过脚手架搭建项目: $ create-react-app 开始项目: ...

    Cympros 评论0 收藏0
  • 通过create-react-app从零搭建react环境

    摘要:通过文件可以对图标名称等信息进行配置。注意,注册的只在生产环境中生效,并且该功能只有在下才能有效果该文件是过滤文件配置该文件是描述文件定义了项目所需要的各种模块,以及项目的配置信息比如名称版本许可证等元数据。 一、 快速开始: 全局安装脚手架: $ npm install -g create-react-app 通过脚手架搭建项目: $ create-react-app 开始项目: ...

    CoyPan 评论0 收藏0
  • WebAssembly 初体验:从零开始重构计算模块

    摘要:初体验从零开始重构计算模块从属于笔者的前端入门与工程实践,更多相关资料文章参考学习与实践资料索引和学习与实践资料索引。不过笔者也只是了解其概念而未真正付诸实践,本文即是笔者在将我司某个简单项目中的计算模块重构为过程中的总结。 WebAssembly 初体验:从零开始重构计算模块从属于笔者的 Web 前端入门与工程实践,更多相关资料文章参考WebAssembly 学习与实践资料索引和 ...

    netmou 评论0 收藏0

发表评论

0条评论

cod7ce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<