不使用 create-react-app 创建 React 项目
为什么要发这个帖子?
按照这些命令,使用终端创建反应应用程序非常容易。
npx create-react-app my-app
cd my-app
npm start
很简单吧?然而,我们可能并不清楚后台运行着什么。我们的 React 应用需要哪些组件才能运行。这就是我们在这篇文章中要讲的内容。如何从零开始构建一个 React 应用。
为了实现这一点,我们需要在你的系统中安装 npm
步骤
在您的系统中创建一个目录
mkdir 我的应用程序
进入目录
cd 我的应用程序
创建 package.json 文件
npm init -y
npm init 将创建新的 package.json 文件,
标志 -y 将告诉 npm 在创建 package.json 时使用所有默认配置选项
安装 react 和 react-dom
npm 安装 react react-dom
使用:它将在 package.json 文件的依赖项下添加 react 和 react-dom,并创建包含所有其他依赖库的 node_modules 目录。
创建 gitIgnore 以避免将不必要的代码推送到 github
vim .gitignore
你的 gitignore 文件中可能需要的内容包括
node_modules
.DS_Store -- 如果你在 Mac 机器上
dist
dist(分发文件夹)——是 webpack 和 babel 在构建代码时生成的构建目录。因此,我们不希望此文件夹与生产环境应用的编译器一起生成。
创建应用程序文件夹
mkdir 应用程序
在其中创建两个文件。
触摸 index.js index.css
开始编写你的 Hello World React 应用程序
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
class App extends React.Component{
render(){
return(
<div>Hello World</div>
)
}
}
ReactDOM.render(<App />, document.getElementById('app'))
因此,当您尝试在浏览器中运行此代码时,它将出现错误,因为我们的代码是用 JSX 编写的,而浏览器无法理解它。
这就是 Babel 和 Webpack 发挥作用的地方。
要安装这两个组件所需的所有依赖项,请在终端中运行以下命令。
npm install --save-dev @babel /core @babel /preset-env @babel /preset-react webpack webpack-cli webpack-dev-server babel-loader css-loader style-loader html-webpack-plugin
标志 --save-dev :我们使用此标志来区分构建依赖项和应用程序依赖项
您可以检查您的 package.json 文件以了解此标志如何区分。
Webpack 配置
Webpack 是一个模块打包工具。所以目前我们只有一个模块。但是,随着应用的扩展,我们会有更多模块。因此,Webpack 会智能地将所有这些模块绑定在一起,并创建一个包含所有这些模块的文件。
触摸 webpack.config.js
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry : './app/index.js',
output : {
path : path.resolve(__dirname , 'dist'),
filename: 'index_bundle.js'
},
module : {
rules : [
{test : /\.(js)$/, use:'babel-loader'},
{test : /\.css$/, use:['style-loader', 'css-loader']}
]
},
mode:'development',
plugins : [
new HtmlWebpackPlugin ({
template : 'app/index.html'
})
]
}
如何配置 webpack 查看我之前的帖子
与 babel-loader 一起工作,我们必须将 babel preset 配置添加到我们的 package.json 文件中
"main": "index.js",
"babel":{
"presets" : [
"@babel/preset-env",
"@babel/preset-react"
]
}
要运行构建,我们必须将 webpack 添加到 package.json 中的脚本标签中
"main": "index.js",
"babel":{
"presets" : [
"@babel/preset-env",
"@babel/preset-react"
]
},
"scripts": {
"create": "webpack"
},
因此,当我从终端运行npm run create时,它将运行 webpack,它将创建 dist 文件夹和带有 index.html 文件的捆绑文件。
每次运行 webpack 都很麻烦。所以你可以启动一个 webpack 开发服务器,这样它就会在你运行它时立即开始构建你的代码。在 package.json 中修改你的脚本,如下所示:
"scripts": {
"start": "webpack-dev-server --open"
}
现在,当您运行npm run start时,它将启动开发服务器并在浏览器中打开您的应用程序。
要旨
## commands from terminal | |
mkdir my-app | |
cd my-app | |
npm init -y -- creates package.json file with default configurations | |
npm install react react-dom -- install react and react-dom dependencies | |
vim .gitignore -- creates gitigonre file | |
mkdir app --create app folder in your project folder | |
cd app | |
touch index.js index.css -- creates two files in app directory | |
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react webpack webpack-cli webpack-dev-server babel-loader css-loader style-loader html-webpack-plugin -- adding all require depnendincies to the project | |
touch webpack.config.js -- creating webpack configurations file |
<!DOCTYPE html> | |
<html> | |
<head><title> | |
my-app | |
</title></head> | |
<body> | |
<div id="app"></div> | |
</body> | |
</html> |
import React from 'react'; | |
import ReactDOM from 'react-dom'; | |
import './index.css'; | |
class App extends React.Component{ | |
render(){ | |
return( | |
<div>Hello World</div> | |
) | |
} | |
} | |
ReactDOM.render(<App />, document.getElementById('app')) |
{ | |
"name": "github-battle", | |
"version": "1.0.0", | |
"description": "", | |
"main": "index.js", | |
"babel":{ | |
"presets" : [ | |
"@babel/preset-env", | |
"@babel/preset-react" | |
] | |
}, | |
"scripts": { | |
"start": "webpack-dev-server --open" | |
}, | |
"keywords": [], | |
"author": "", | |
"license": "ISC", | |
"dependencies": { | |
"react": "^16.8.6", | |
"react-dom": "^16.8.6" | |
}, | |
"devDependencies": { | |
"@babel/core": "^7.4.3", | |
"@babel/preset-env": "^7.4.3", | |
"@babel/preset-react": "^7.0.0", | |
"babel-loader": "^8.0.5", | |
"css-loader": "^2.1.1", | |
"html-webpack-plugin": "^3.2.0", | |
"style-loader": "^0.23.1", | |
"webpack": "^4.30.0", | |
"webpack-cli": "^3.3.1", | |
"webpack-dev-server": "^3.3.1" | |
} | |
} |
var path = require('path'); | |
var HtmlWebpackPlugin = require('html-webpack-plugin'); | |
module.exports = { | |
entry : './app/index.js', | |
output : { | |
path : path.resolve(__dirname , 'dist'), | |
filename: 'index_bundle.js' | |
}, | |
module : { | |
rules : [ | |
{test : /\.(js)$/, use:'babel-loader'}, | |
{test : /\.css$/, use:['style-loader', 'css-loader']} | |
] | |
}, | |
mode:'development', | |
plugins : [ | |
new HtmlWebpackPlugin ({ | |
template : 'app/index.html' | |
}) | |
] | |
}; |
node_modules | |
.DS_Store | |
dist |
结论
我们创建一个简单的应用组件,并在 ID 为“app”的元素中渲染该组件。Webpack 从 index.html 开始,获取我们应用程序中的所有模块,并执行所有转换,例如 babel-loader、css-loader 和 style-loader。Babel loader 使用 env 和 React 预设来支持旧版浏览器,并将完整代码导出到 dist 文件夹中,以便我们在生产环境中部署。
文章来源:https://dev.to/vish448/create-react-project-without-create-react-app-3goh