Q1. yarn build打包生成的文件直接点击index.html报错,打不开,导致的问题是yarn build打包生成的文件部署到服务器时只能在服务器根目录,如果在其他文件夹里面会报错

A1:

默认情况下,index.html中引入js和css的方式是,需要在本地启一个服务器才行,即在打包文件根目录下打开命令行,输入http-server,即可通过localhost:8080来访问到项目。

解决办法是:

1.将所有引入资源文件的地方路径改为./,eg:,即可通过直接点击index.html来打开项目。

2.打包前在package.json文件里添加一个配置:"homepage":".",打包之后资源文件路径前面都会加上一个点

{

"name": "test04",

"version": "0.1.0",

"private": true,

"dependencies": {

"react": "^16.0.0",

"react-dom": "^16.0.0",

"react-scripts": "1.0.17"

},

"scripts": {

"start": "react-scripts start",

"build": "react-scripts build",

"test": "react-scripts test --env=jsdom",

"eject": "react-scripts eject"

},

"homepage":"."

}

这样直接点开会有一个报错

registerServiceWorker.js:71 Error during service worker registration: DOMException: Failed to register a ServiceWorker: The URL protocol of the current origin ('null') is not supported.

原因是serviceWorker不支持//这种协议,需要放到https或者localhost下才行。参考网址

打包时默认执行react-script模块下的一些脚本配置文件,所以直接找到并修改这些文件也是可行的

具体路径是:项目文件夹\node_modules\react-scripts\config里面的paths.js文件

function getServedPath(appPackageJson) {

const publicUrl = getPublicUrl(appPackageJson);

const servedUrl =

envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : './');

return ensureSlash(servedUrl, true);

}

pathname改成./就可以了。参考网址

如果页面中引用了很多资源文件图片、视频、字体等,不可能一个个去自动建立好的文件里去找再修改路径,这时就可以在yarn build命令前设置PUBLIC_URL。

windows系统下:

set PUBLIC_URL=./ yarn build

mac、linux系统下:

PUBLIC_URL=./ yarn build

参考网址

Q2. 如何修改create-react-app的配置

A2:

现在 如果你正在搭建react运行环境,使用 create-react-app 去自动构建你的app程序。你的项目所在的文件夹下是没有配置文件。react-scripts 是唯一的 额外的 构建依赖在你的package.json中,你的运行环境将有每一个你需要用来构建一个现代React app应用程序。你需要的依赖,和在配置文件中编写的配置代码,react-scripts 都帮你写了,比如:react-scripts帮你自动下载需要的 webpack-dev-server 依赖,然后react-scripts自己写了一个nodejs服务端的脚本代码 start.js来 实例化 WebpackDevServer ,并且运行启动了一个使用 express 的Http服务器,现在你只需要专心写src源代码就可以了。省去了很多精力,最适合快速上手一个demo了。

有两种操作:

通过react-app-rewired插件,react-app-rewired的作用就是在不eject的情况下,覆盖create-react-app的配置。如果已经eject导出了配置,就没有必要使用react-app-rewired。使用插件的方法见官方文档,插件的相关介绍见参考网址

这个插件可以在不更改原始配置脚本的前提下更改默认配置,加一些plugins, 或者loaders,比如antd按需加载样式、less文件识别 。

按需加载参考链接:

引入 react-app-rewired并修改 package.json 里的启动配置:

$ yarn add react-app-rewired --dev

/* package.json */

"scripts": {

- "start": "react-scripts start",

+ "start": "react-app-rewired start",

- "build": "react-scripts build",

+ "build": "react-app-rewired build",

- "test": "react-scripts test --env=jsdom",

+ "test": "react-app-rewired test --env=jsdom",

}

然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。

module.exports = function override(config, env) {

// do stuff with the webpack config...

return config;

};

使用 babel-plugin-import, babel-plugin-import是一个用于按需加载组件代码和样式的 babel 插件(原理),现在我们尝试安装它并修改 config-overrides.js 文件。

yarn add babel-plugin-import --dev

+ const { injectBabelPlugin } = require('react-app-rewired');

module.exports = function override(config, env) {

+ config = injectBabelPlugin(['import', { libraryName: 'antd-mobile', style: 'css' }], config);

return config;

};

更改引用方式

- import Button from 'antd-mobile/lib/button';

+ import { Button } from 'antd-mobile';

LESS文件处理:

两种方式:

使用react-app-rewire-less插件。npm install --save react-app-rewire-less。

然后在项目根目录下创建 config-overrides.js文件,添加如下内容:

const rewireLess = require('react-app-rewire-less');

/* config-overrides.js */

module.exports = function override(config, env) {

config = rewireLess(config, env);

return config;

}

官方的参考链接:

First, let’s install the command-line interface for Sass:

npm install --save node-sass-chokidar

Alternatively you may use yarn:

yarn add node-sass-chokidar

Then in package.json, add the following lines to scripts:

"scripts": {

+ "build-css": "node-sass-chokidar src/ -o src/",

+ "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",

"start": "react-scripts start",

"build": "react-scripts build",

"test": "react-scripts test --env=jsdom",

通过npm run eject来暴露所有的配置文件

转到自定义配置

如果你是重度用户 并且对默认配置不满意,你可以从工具中退出,并像样板生成器一样使用它。

运行 npm run eject 复制所有依赖文件和相应依赖 (Webpack、Babel、ESLint 等等) 到你的项目,因此完全可控。类似 npm start 和 npm run build 的命令依旧会工作, 但他们会指向复制的脚本,因此你可以调整。在这一点上,你只能靠自己。

注: 这是个单向操作。一旦 eject,你就回不去啦!

你可能不需要使用 eject。 这个功能集适合中小型部署,而且你不应该感到有义务使用此功能。但是,我们明白如果你无法自定义该工具,那么它将不会有用。参考网址

下面介绍如何修改暴露之后的配置文件来解决直接点击index.html报错问题

项目文件/config/paths.js修改如下:

function getServedPath(appPackageJson) {

const publicUrl = getPublicUrl(appPackageJson);

const servedUrl =

envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : './');

return ensureSlash(servedUrl, true);

}

pathname值改为./

下面介绍修改修改暴露之后的文件解决antd样式丢失问题:

项目文件/config/webpack.config.dev.js和项目文件/config/webpack.config.prod.js两个文件对应位置加上

"plugins": [

["import", {"libraryName": "antd-mobile", "style": "css"}],

],

修改之后是这样:

// Process JS with Babel.

{

test: /\.(js|jsx|mjs)$/,

include: paths.appSrc,

loader: require.resolve('babel-loader'),

options: {

"plugins": [

["import", {"libraryName": "antd-mobile", "style": "css"}],

],

compact: true,

},

},

react打包成html5,create-react-app项目打包相关问题相关推荐

  1. vue脚手架项目打包成app_React和Vue脚手架项目打包编译后如何打开

    1.React项目 1.安装npm install -g serve 2.package.json文件加入 "homepage":"http://myname.githu ...

  2. 把vue-cli脚手架打包成移动端5+app

    一.使用HbuildX,创建5+app项目 点击创建,项目创建成功,把下面除了manifest.json文件都可以删除 二.运行npm run build打包vue项目 vue项目打包成功后,会生成d ...

  3. android将activity打成jar包供第三方调用,把Activity打包成jar供其App使用

    写Resource反射工具类ResourceUtils: public class ResourceUtils { private static HashMap idMap = new HashMap ...

  4. myeclipse打包java文件_MyEclipse将Java项目打包成jar文件的三种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MANIFEST.MF", 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFE ...

  5. eclipse中简单实现自己的工具类打包成jar包并在项目中使用

    在现实开发中我们经常会自己写工具方便别人使用,所以就要将我们写好的工具打包成jar包,给别人调用 一.首先,编写一个类MyFristJar.java,代码如下: package com.zl.myja ...

  6. php项目打包成phar,PHP:Phar的打包和使用

    什么是Phar? Phar是PHP里类似于 Jar的一种打包文件,可以将整个应用打包,便于部署等. 安装需求 Phar需要 PHP >= 5.2,在 PHP5.3或以上,Phar已经包含在内置的 ...

  7. 【Java】Java GUI制作Windows桌面程序,利用windowbuilder生成界面,使用exe4j打包成可执行文件,使用Inno Setup打包成安装包,超级详细教程

    目录 1.GUI插件 1.1 下载GUI绘制插件 1.2 eclipse中配置windowbuilder插件 2.绘制GUI界面 2.1 建立一个GUI的项目 3.配置Maven项目 3.1新建一个M ...

  8. python程序打包成apk_利用Gradle+Python3自动打包Android APK上传到蒲公英。

    利用Gradle+Python3自动打包Android APK上传到蒲公英. 面对每次都要打包一个版本发布给测试,都要手动打包签名~然后登录上传文件.这些繁琐的事情.于是就想到一句很经典的话,(人生苦 ...

  9. Pyinstaller将Python程序打包成EXE(多种模式的打包)

    Pyinstaller将Python程序打包成EXE 文章目录 Pyinstaller将Python程序打包成EXE 安装 安装 pip install pyinstaller 博文已经迁移到个人主页 ...

  10. python写的程序怎么打包成exe_python--- 如何将自己的程序打包成exe ?

    最近用python Tkinter 写了一个看stock的小工具.. .  把它调节成半透明悬浮    你懂得 但是每次总用pycharm 或者调python去加载使用多少有些不便,如何打包成exe成 ...

最新文章

  1. 初学者应该了解的编程陷阱:javascript篇
  2. jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!
  3. 吴恩达《机器学习》课程总结(16)推荐系统
  4. 使用BusyBox制作嵌入式Linux根文件系统
  5. 基于实战开发垂直搜索引擎_基于DDD的微服务设计和开发实战
  6. scala 类中的对象是类_Scala中的类和对象
  7. 【Android优化篇】提升Activity加载速度的方法
  8. 高级Bash脚本编程入门
  9. Windows10输入法变成繁体怎么办?
  10. Vivado HLS介绍及IP核的设计流程
  11. Practical Python and OpenCV 3rd Edition读书笔记_Chapter8_Smoothing and Blurring平滑与模糊_思维导图
  12. 小心计算机视觉综合征!快来get护眼大法……
  13. BZOJ 3159: 决战 解题报告
  14. 通俗易懂和你聊聊寄存器那些事(精美图文)
  15. java咖啡机如何清洗_咖啡过滤器怎么清洗
  16. 服务器后还有一系列留后门,服务器留后门的原则是什么
  17. Android 桌面组件【app widget】 进阶项目--心情记录器
  18. VC MFC(Custom Control)自定义控件
  19. 服务器无法替换dll文件,教你如何彻底删除服务器上的残留dll文件
  20. Ubuntu系统中英文切换

热门文章

  1. c#使用SHA256算法实现对文件的加密和解密
  2. Eclipse导出Java文件为.exe可执行文件
  3. matlab的GUI实验——实现简单信号发生器
  4. A1136 | 字符串处理、大整数运算
  5. 分布式数据库架构及企业实践--基于Mycat中间件pdf
  6. Java中的toString()方法
  7. perl中的文件句柄
  8. [转载] python的next()函数
  9. [转载] C++子字符串查找及提取
  10. [转载] Python版简易计算器的实现