最小白的webpack+react环境搭建

本文转载于:猿2048网站https://www.mk2048.com/blog/blog.php?id=h2aabhj&title=%E6%9C%80%E5%B0%8F%E7%99%BD%E7%9A%84webpack%2Breact%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

本文也同步发表在我的公众号“我的天空

 1131813-20180818095258127-1977060681.jpg

从零开始,用最少的配置、最少的代码、最少的依赖来搭建一个最简单的webpack+react环境。

最近在玩webpack+react+移动端,那么第一步自然是搭建相关的环境,本来网上的教程很不错,只是前端相关的东西发展太过迅猛,只相隔了半年有些东西的版本就不对了,有些配置、命令等照着之前的教程做就可能会掉到坑里去,别问我怎么知道的,我刚刚从坑里爬出来,因此赶紧写篇文章来记录一下,也算是让自己再巩固一下。

本篇完全是从零开始,用最少的配置、最少的代码、最少的依赖来搭建一个最简单的webpack+react环境。会把一个小白的经历原原本本的写出来,遇到的坑都用红色的字标注出来,由于我也是第一次学习相关的知识点如果有不正确的地方也多多欢迎大家来指出。

本篇文章写作的日期是2018-7-21,因此所有依赖的版本到当前日期为止,以后如果有升级变化的话,那也是无法当前预料得到的。我的操作系统是win7,因此不涉及到linux的相关知识点。编辑器是Sublime Text3.0,顺便安利一下Sublime Text,好用速度又快,真心不错!

我是参考这篇教程:https://segmentfault.com/a/1190000006178770

 


现在让我们开始吧,第一步我们先配置一个webpack的web服务器。

webpack依赖于node.js,那么第一步是安装node.js,这个没什么好说的,windows环境的安装就更友好了,官网下载安装包,一路默认安装即可,现在的node.js安装完毕后,npm也就自带安装好了,后面我们就要一路与npm打交道了。

首先我们要用npm初始化项目,电脑上新建一个目录保存我们的练习文件,随后进入cmd命令行,转到该目录下。如果命令行不会操作的话,请先掌握cd这个命令。接下来在该目录下输入npm init命令:

npm init

 根据提示一路回车就可以了,不过这个地方可能会有一个存在,如图:

1131813-20180817222845744-1809198137.jpg

这里报错:Sorry,name can only contain URL-friendly characters。

该错误产生的原因是npm初始化时,会向我们询问项目名,如果我们不指定的话(通常都是如此),那么就会用当前文件夹来命名,而我们的文件夹的名称为“练习-react环境”,其包含了一个中划线(-),因此导致命名错误了。那么我们只要输入一个项目名称(譬如test)就可以了, 或者干脆把文件夹重命名为符合规范的名称就可以了。

本例中我们手动输入了test,将项目名称指定为test:

1131813-20180817223028786-1758375257.jpg

接下来就一路回车,最后询问“Is this OK?<y>”时输入y后回车,完成npm初始化。

1131813-20180817223135557-1437123482.jpg

npm初始化后,在文件夹下将会出现一个node_modules文件夹(目前为空),以及pack.json文件。其实我们刚才npm init命令就是为了配置这个package.json,因此也可以完全自己来手动创建。

接下来安装webpack和webpack-dev-server,执行命令:

npm install webpack webpack-dev-server --save-dev

安装webpack很顺利,没有遇到任何问题。

安装完毕后,node_modules文件夹中就不再为空了,里面存放的都是webpack的相关依赖。package.json中也多了"dependencies"和"devDependencies"两项,其记录的是当前依赖及版本信息,其中"dependencies"为空。

"devDependencies": {
    "webpack": "^4.16.1",
    "webpack-dev-server": "^3.1.4"
},
"dependencies": {
}

随后在当前文件夹下新建一个public文件夹(文件夹名任意),在里面写一个index.html页面,内容随意。接下来我们就要配置webpack了,在文件夹下新建一个webpack.config.js文件,此时目录结构为:

1131813-20180817223642863-828558272.jpg

编辑webpack.config.js,由于我们的目的是创建一个web服务器,因此只需要配置以下内容:

module.exports={
    devServer:{
        contentBase:"./public"
    }
}

devServer是webpack中web服务器的相关配置项,contentBase指定的是页面加载目录,而其加载页面默认为index.html,由于我们的index.html是在public目录下,因此就将contentBase设置为"./public“。

接下来在package.json中配置web服务启动命令,该命令配置在scripts中的,其命令名称为“server”,命令详情为“webpack-dev-sever --open”:

"server":"webpack-dev-server --open"

将其插入scripts中:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "server": "webpack-dev-server --open"
},

在命令行中输入"npm run server”回车以便启动web服务,此时会遇到一个,webpack并没有启动web服务,而是报错:

1131813-20180817224026516-389829489.jpg

其大意是缺少webpack-cli,那么我们自然就安装这个webpack-cli,执行命令:

npm install webpack-cli --save-dev

webpack-cli安装过程很顺利,随后再执行“npm run server”就可以正常启动web服务了,并且启动默认浏览器,显示public下的Index.html页面,web服务的默认端口是8080。

1131813-20180817224138277-324255368.jpg

至此,我们第一部分的目的:启动一个web服务便完成了,总结一下,要从零开始启动webpack的web服务需要做:

  1. 安装node.js、npm

  2. 安装webpack、webpack-cli、webpack-server-dev

  3. npm初始化

  4. 编写一个显示页面并命名为index.html

  5. 创建webpack.config.js,并配置devServer信息。

  6. 配置package.json,设置web启动命令。

到目前为止,我们丝毫未提及另一位主角:react,接下来我们就继续搭建环境,让其支持react。首先自然是要安装react,我们需要安装react和react-dom,执行命令:

npm install react react-dom --save

由于react是在正式环境中也需要的,因此npm安装时没有带-dev参数。

接下来修改之前的index.html,不管以前是怎么编写的,请在HTML中增加一个 <div>,将其的ID设置为"boot“,同时编写外部js引入,引入的js名为bundle.js。

<body>
    <div id='root'></div>
    <script  src='bundle.js'></script>
</body>

接下来在public目录下创建index.jsx文件,注意后缀名是jsx,其内容为:

import React from 'react'
import { render } from 'react-dom'

class Hello extends React.Component {
    render() {
       return (
           <p>hello react!</p>
        )
    }
}
render(
    <Hello/>,
    document.getElementById('root')
)   

react的语法细节我们暂时不关心,只要知道最后页面上会输出hello react!就可以了。

jsx是react的专用语法,HTML是无法引用的,因此我们需要将其转换为HTML能够识别的JS,而这个正是webpack大显身手的时候,我们开始来配置webpack,配置之前,再确认一下的当前的目录结构:

1131813-20180817224540699-145850740.jpg

首先我们是通过babel来转换jsx的,因此需要安装babel相关的环境,我们需要安装:

  • babel-core

  • babel-loader

  • babel-preset-es2015

  • babel-preset-react

执行命令:

npm install babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev

由于我们要转换的源文件是index.jsx,转换后的目标文件是bundle.js,因此需要在webpack中配置入口和出口,在文本webpack.config.js中增加以下内容:

entry:__dirname+"/public/index.jsx",
output:{
     path:__dirname+"/public",
     filename:'bundle.js'
}

entry是转换的入口,而output是转换的出口。

同时还要在webpack.config.js中配置loader,让其通过外部工具来处理文件,而我们当前要处理的是通过babel来处理jsx文件。因此到了这一步我们大致会有些明白了,并不是webpack本身帮我们处理这些,而是像个中介一样,把要处理的部分与相关的工具联系在一起。

我们在webpack.config.js中加入:

module: {
    loaders: [
        { test: /\.(jsx)$/, exclude: /node_modules/, loader: 'babel' }
    ]    
}

其表明jsx文件需要用babel来处理,但是对于node_modules文件夹中的文件忽略掉(exclude设置)。此时webpack.config.js的内容就是:

module.exports={
    entry:__dirname+"/app/index.jsx",
    output:{
        path:__dirname+"/app",
        filename:'bundle.js'
    },
    devServer:{
        contentBase:"./public"
    },
    module: {
        loaders: [
            { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel' }
        ]
    }
};

照理来说,到了这一步所有该做的事情都已经做完了,通过babel将index.jsx解析成bundle.js,Web服务将启动index.html,而index.html会引入bundle.js,最后在页面上显示hello react!

但是,事情往往不是那么顺利的,接下里要继续踩坑!首先我们先执行npm run server看看是什么情况:

1131813-20180817225329838-563605788.jpg

马上就遇到,刺眼的红色错误提示,意思居然是loaders属性无效?!问题出现在webpack版本上,我们安装的版本是4.16.1,此时webpack.config.js中loaders的写法已经过时,应该用rules,同时babel也应该用babel-loader来替代,实际的写法为:

module: {
   rules: [
        { test: /\.(jsx)$/, exclude: /node_modules/, loader: 'babel-loader' }
    ]    
}

此时webpack.config.js的内容为:

module.exports={
    entry:__dirname+"/app/index.jsx",
    output:{
        path:__dirname+"/app",
        filename:'bundle.js'
    },
    devServer:{
        contentBase:"./public"
    },
    module: {
        rules: [
            { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader' }
        ]
    }
};

接下来继续试试npm run server,依然报错:

1131813-20180817225659821-846854482.jpg

此处仍然有一!由于我们的jsx是用es6语法编写的,因此需要通过label来解析,那么实际上此处还缺少一个文件,就是“.babelrc”,注意这是一个名称很奇葩的文件,只有扩展名而没有文件名,该文件在windows环境下是无法通过资源管理器创建的,需要到命令行下执行type null>.babelrc命令:

type null>.babelrc

1131813-20180817225917459-377450806.jpg

虽然提示“系统找不到指定的文件”,但是实际上已经创建了.babelrc文件,随后用文本编辑器将该文件打开,输入内容:

{
  "presets": ["react", "es2015"],
  "env": {
    "dev": {
        "plugins": [["react-transform", {
           "transforms": [{
             "transform": "react-transform-hmr",
             "imports": ["react"],
             "locals": ["module"]
           }]
        }]]
    }
  }
}

至此,再执行npm run server,终于可以看到页面正常显示了!

1131813-20180817230122275-1435310359.jpg

果此时页面还不能正常显示的话,也许就要清理下缓存,重新生成bundle.js文件。或者在package.json中的scripts中增加“start“命令,其值为“webpack”,即:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack",
    "server": "webpack-dev-server --open"
},

这样在命令行中执行“npm start”就可以重新编译jsx为bundle.js了。

npm start

再总结一下我们遇到的

  • npm初始化时的项目名称要合规,特别是不能出现中划线下划线。

  • 安装webpack-cli。

  • loaders已过时,需要替换为rules。

  • 需要创建.babelrc文件。

至此我们便搭建了一个最简单的webpack+react环境,当我们修改index.jsx中的内容时,页面刷新后也会发生改变,接下来就可以好好学习react了!

当然,我们可以更改webpack.config.js中的devServer,添加inline:true,这样便可以实现jsx更改后,页面会自动刷新,不用我们每次修改后都去手动刷新去看效果了。另外再增加mode:"development",这样刷新的速度会大大加快!

最终的文件目录结构为:

1131813-20180817230336719-1068696949.jpg

 各文件的最终内容:

index.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div id='root'></div>
    <script  src='bundle.js'></script>
</body>
</html>

index.jsx

import React from 'react'
import { render } from 'react-dom'

class Home extends React.Component{
    render(){
    return(
            <p>Hello react!</p> 
    )
    }
}
render(
    <Hello />,document.getElementById('root')
)

.babelrc

{
  "presets": ["react", "es2015"],
  "env": {
    "dev": {
        "plugins": [["react-transform", {
           "transforms": [{
             "transform": "react-transform-hmr",
             "imports": ["react"],
             "locals": ["module"]
           }]
        }]]
    }
  }
}

package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack",
    "server": "webpack-dev-server --open"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.5",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "webpack": "^4.16.1",
    "webpack-dev-server": "^3.1.4"
  },
  "dependencies": {
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
  }
}

webpack.config.js

module.exports={
mode:"development", entry:__dirname
+"/app/index.jsx", output:{ path:__dirname+"/app", filename:'bundle.js' }, devServer:{ contentBase:"./public",
inline:true
}, module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader' } ] } };

 

本文转载于:猿2048https://www.mk2048.com/blog/blog.php?id=h2aabhj&title=%E6%9C%80%E5%B0%8F%E7%99%BD%E7%9A%84webpack%2Breact%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

转载于:https://my.oschina.net/u/4181724/blog/3092746

前端环境搭建react18+typescript+webpack5 到目前为止已经使用webpack5把react18+ts的开发环境配置完成,并且配置比较完善的保留组件状态的热更新,以及常见的优化构建速度和构建结果的配置,完整代码已上传到webpack5-react-ts。还有细节需要优化,比如把容易改变的配置单独写个config.js来配置,输出文件路径封装。这篇文章只是配置,如果想学好webpack,还需要学习webpack的构建原理以及loader和plugin的实现机制。 阅读详情

相关推荐

Node 20 + React 18 + Babel 7 + Webpack 5 开发环境搭建

【代码】React 18 + Babel 7 + Webpack 5 开发环境搭建

wwwmewww的专栏 1332

Sorry, name can only contain URL-friendly characters and name can no longer contain capital letters.

npm should be run outside of the node repl, in your normal shell

Yy_Rose的博客 1万+

MAX31856高精度热电偶测温系统实战:从寄存器配置到温度读取

本文详细介绍了MAX31856高精度热电偶测温系统的实战应用。从硬件连接避坑、核心寄存器配置(如CR0、CR1),到利用中断高效读取并解析温度数据,提供了完整的驱动框架和代码示例。该方案解决了传统热电偶信号微弱、非线性及冷端补偿难题,适用于工业测温等场景,帮助开发者快速实现稳定可靠的高精度温度测量。

coffee的博客 451

微信小程序构建npm

微信小程序构建npm包遇坑填坑 功夫不负有心人,遇坑必须填此坑! 标题废话不多说,直接上图片示例: 第一步:如遇提示:         微信开发者工具构建没有可以构建的npm包 第二步:在终端打开文件的根目录,进行如下操作:          1、打开cmd 终端      

学全栈、大前端方向,就找前端早间课 1272

name cannot start with an underscore; name can only contain URL-friendly characters

nodejs安装插件遇到错误,提示命名问题 npm WARN old lockfile npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must be fetched from the registry. npm WARN old lockfile npm WARN old lock

u014685642的博客 5828

Node

monNode.js 1.1 Node学前 1.1.1 了解Node 1.1.1.1 Node.js是什么? Node不是一门语言,不是库,不是框架,是一个 JavaScript 运行时环境。简单的来说就是Node可以解析和执行JavaScript代码,以前只有浏览器可以执行 JavaScript 代码,也就是说现在的 JavaScript 可以完全脱离浏览器运行。 事件驱动、非阻塞IO模...

xiaodingyang的博客 774

nodeJS学习笔记

Node介绍 为什么要学习Node.js 企业需求 具有服务端开发经验更改 front-end back-end 全栈开发工程师 基本的网站开发能力 服务端 前端 运维部署 多人社区 Node.js是什么 Node.js是JavaScript 运行时 通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 浏览器中的Jav...

猪窝 467

使用Webpack搭建一个基本的React环境

1.首先初始化项目结构 npm init 包名随意 填写好之后一路按回车,直到文件夹内生成 package.json 文件, 在与package.json同级的目录下新建一个文件夹用于新建项目 由于Node.js会自下而上的找包,所以我们把包安装在外层(也就是package.json同级目录),让Node.js自己去找包,这样我们就只用安装一次包非常的方便。 2.安装webpack相关包 npm i webpack webpack-cli webpack-dev-server -D npm i h

博客的博客 247

基于Webpack搭建React开发环境

前几天一直在学习webpack,总算比之前学习的时候有了点收获,所以在昨天发布了一篇webpack入门笔记,今天继续使用webpack练了练手,搭建了一个React开发环境,如果还不熟悉的童鞋可以看一下昨天发布的笔记:入门webpack笔记 一、初始化项目文件夹 在任意目录下,新建一个文件夹作为你的项目文件夹,命名随意。随后使用命令行工具,切换到该文件夹,键入npm init进行初始化(遇到的问...

Mo_Luffy的博客 188

Webpack搭建React开发环境

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!

2401_84097678的博客 1049

webpack搭建react开发环境

Webpack基础配置指南:1. 安装使用项目本地依赖安装(npm install --save-dev webpack);2. 配置文件包含mode(开发/生产模式)、entry(单/多入口)、output(输出路径)等核心配置;3. Loader处理各类资源转换(JSX/CSS/图片等),支持链式调用;4. 插件系统扩展功能,如HtmlWebpackPlugin管理HTML;5. 开发环境配置webpack-dev-server实现本地服务。建议通过配置文件管理构建流程,而非使用默认配置。文档参考中英文

weixin_46112174的博客 1207

Webpack: 搭建 React 全栈开发环境

传统 Web 开发强调样式、结构、逻辑分离,以此降低技术复杂度。但 React 认为渲染逻辑本质上与其它 UI 逻辑存在内在耦合关系,所以提倡将结构、逻辑与样式共同存放在同一文件中,以“组件”这种松散耦合结构实现关注点分离,并为此设计实现了一套为支持这一特性,我们需要搭建一套使用的工程化环境,将 JSX 及 React 组件转换为能够在浏览器上运行的 JavaScript 代码。使用Babel处理JSX文件使用运行 React 应用。

Wang的专栏 1450

Webpack 搭建基础 react 项目环境

使用webpack搭建基础的react项目环境,此篇仅作为工作中的笔记

weixin_43933035的博客 1693

自动识别象棋棋子的OpenCV应用

在计算机视觉领域,OpenCV是一个广泛应用的开源计算机视觉库,它提供了丰富的图像处理和分析工具。本文将介绍如何使用OpenCV实现自动识别象棋棋子的功能,并提供相应的源代码。通过以上代码,我们可以实现对棋盘图像中棋子的自动识别。需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要根据具体情况进行参数调整和算法优化,以获得更好的识别效果。函数利用预处理后的图像,寻找图像中的轮廓,并根据轮廓的面积筛选出可能的棋子轮廓,后在原图像中提取棋子区域。在主程序中,我们读取输入图像,并调用。

WzisTypescript的博客 868

yolov12暗光环境车辆检测-夜间交通监控和安防监控+数据集+训练好的模型.zip

yolov12暗光环境车辆检测-夜间交通监控和安防监控+数据集+训练好的模型,包含有使用教程和模型评价指标曲线图;1. 内部包含标注好的目标检测数据集,分别有yolo格式(txt文件)和voc格式标签(xml文件), 共6394张图像, 已划分好数据集train,val, test,并附有data.yaml文件可直接用于yolov5,v8,v9,v10,v11,v12等算法的训练;2. yolo目标检测数据集类别名:暗光环境车辆检测,包括 car(车辆)3. yolo项目用途:暗光环境车辆检测,夜间交通监控和安防监控4. 可视化参考链接:https://blog.csdn.net/weixin_51154380/article/details/126395695?spm=1001.2014.3001.55025. 下拉页面至“资源详情处”查看具体具体内容;

上一篇: css3之图形绘制
下一篇: 第一篇随笔---css3动画(奔跑的小杨)
chuke5164
博客等级 码龄9年 2粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值