React目录结构详细解析

2021-12-06 14:02:41 浏览数 (1)

总览

WebStorm创建工程后目录结构如图所示:

1、package.json

每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

负责 管理 整个项目用到的 依赖包 列表配置 以及 项目打包的一些脚本命令 scripts 配置

1.1 name字段

项目工程名称

"name": "untitled"

项目名称为untitled

1.2 version字段

项目版本号

"version": "0.0.1"

项目版本号为 0.0.1

1.3 private字段

发布配置

"private": true

“private”: true在package.json中设置,那么npm将拒绝发布它。这是一种防止意外发布私有存储库的方法。

1.4 dependencies字段

dependencies字段指定了项目运行所依赖的模块。

代码语言:javascript复制
"dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.5.0",
    "@testing-library/user-event": "^7.2.1",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-scripts": "3.4.3"
  }
  • 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
  • (tilde) 指定版本:比如1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
  • ^号(caret) 指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则**号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
  • latest:安装最新版本。

1.5 scripts字段

scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。

下面的设置指定了npm run start、npm run build、npm run test、npm run eject时,所要执行的命令

代码语言:javascript复制
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

1.6 eslintConfig字段

Eslint配置

代码语言:javascript复制
"eslintConfig": {
    "extends": "react-app",
    "rules":{
      "no-console":1
    }
  }

上面代码,配置了不让输出,否则会warning。

eslint规则(no-console的值):

“off” 或者 0:关闭规则。

“warn” 或者 1:打开规则,并且作为一个警告(不影响exit code)。

“error” 或者 2:打开规则,并且作为一个错误(exit code将会是1)。

1.7 browserslist字段

代码语言:javascript复制
"browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }

browserlist是一个前端项目配置工具,功能是在前端工具之间共享目标环境的浏览信息

比如我们项目构建的时候一般会用到babel,postCss等等,提供了对应的浏览器信息后,他们就会针对浏览器信息采取不同的编译策略。

The config to share target browsers and Node.js versions between different front-end tools.

2、public文件夹

2.1 favicon.ico

是浏览器tab上图标,也是这个项目的一个标志,也可以说是代表一个公司的标志。可以替换。

2.2 index.html

项目的入口文件,引用了第三方类库啊,还可以引入cdn

<div id="root"></div>是项目的总容器,所有的内容存储在这个容器中。这个容器有且只能有一个。

2.3 Robots.txt

代码语言:javascript复制
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

可以对特定网页进行屏蔽

可以参考:https://blog.csdn.net/weixin_30955341/article/details/94896204

2.4 manifest.json

扩展的配置文件,指明了扩展的各种信息

代码语言:javascript复制
{

    // 必须的字段3个

    "name": "MyExtension", // 扩展名称

    "version": "1.0", // 版本。由1到4个整数构成。多个整数间用"."隔开

    "manifest_version": 2, // manifest文件版本号。Chrome18开始必须为2

    "description": "",   // 描述。132个字符以内

    "icons": {

       "16": "image/icon-16.png",

       "48": "image/icon-48.png",

       "128": "image/icon-128.png"

    }, //扩展图标。推荐大小16,48,128

    "default_locale": "en", // 国际化

    "page_action": {

        "default_icon": "image/icon-48.png",

        "default_title": "My Test",

        "default_popup": "html/page.html"

    }, //地址栏最后附加图标。含图标及行为等

    "theme": {}, // 主题,用于更改整个浏览器的外观

    "app": {}, // 指定扩展需要跳转到的URL

    // 根据需要提供

    "background": {

       "scripts": [

           "lib/jquery-3.3.1.min.js",

           "js/background.js"

       ] ,

        "page":"html/background.html"

    },// 指定扩展进程的background运行环境

}

可参考官方文档: https://developer.chrome.com/extensions/manifest

3、src文件夹

src文件夹存放的是这个项目的核心内容,也就是我们的主要工作区域。其中,index.js文件是和index.html进行关联的文件的唯一接口

3.1 index.js

代码语言:javascript复制
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

ReactDOM.render()的作用是将的内容渲染到根“root”中去。

document.getElementById(‘root’)中的"root"便是index.html中的"root"了,便是引用页面内容了。在这里,也可以写一些内容(结构,样式,逻辑)是整个项目的根组件

能够引用的原因是文档内容的头部,有import App from ‘./App’;内容,就是为了将App.js的内容引入到index.js文件中。

3.2 App.js

代码语言:javascript复制
import React from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

export default App;是为了将App公开,index.js才能够引用.

return的内容是类似于html结构的内容,就是jsx,jsx语法是react的主要语法。内部的div的className是为了区分html语法的一个类名,这个是div的样式引用。在这个文件中,只能用一个div容器,如果在div的同级目录添加别的内容,便会报错

className=“App”,是引用到App.css的样式。注意,页面内容样式是就近原则,首先用App.css的样式,App.css是组件的样式,index.css是全局的样式。

0 人点赞