zishu's blog

zishu's blog

一个热爱生活的博主。https://zishu.me

Path issues when packaging React scaffolding projects

The create-react-app scaffold command can generate a React project. After the project is completed, execute the packaging command npm run build. The build folder is generated within the project folder, which contains the packaged files. When running index.html in the browser, the page appears blank and there are errors in the console due to incorrect paths for the CSS and JS files.

By browsing the index.html code, we can see:

<!-- index.html -->

<!doctype html>
<html lang="zh">

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />
    <title>React App</title>
    <link href="/static/css/main.3394d54e.chunk.css" rel="stylesheet">
</head>

<body><noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script>!function (e) { function r(r) { for (var n, l, f = r[0], i = r[1], a = r[2], c = 0, s = []; c < f.length; c++)l = f[c], Object.prototype.hasOwnProperty.call(o, l) && o[l] && s.push(o[l][0]), o[l] = 0; for (n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); for (p && p(r); s.length;)s.shift()(); return u.push.apply(u, a || []), t() } function t() { for (var e, r = 0; r < u.length; r++) { for (var t = u[r], n = !0, f = 1; f < t.length; f++) { var i = t[f]; 0 !== o[i] && (n = !1) } n && (u.splice(r--, 1), e = l(l.s = t[0])) } return e } var n = {}, o = { 1: 0 }, u = []; function l(r) { if (n[r]) return n[r].exports; var t = n[r] = { i: r, l: !1, exports: {} }; return e[r].call(t.exports, t, t.exports, l), t.l = !0, t.exports } l.m = e, l.c = n, l.d = function (e, r, t) { l.o(e, r) || Object.defineProperty(e, r, { enumerable: !0, get: t }) }, l.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, l.t = function (e, r) { if (1 & r && (e = l(e)), 8 & r) return e; if (4 & r && "object" == typeof e && e && e.__esModule) return e; var t = Object.create(null); if (l.r(t), Object.defineProperty(t, "default", { enumerable: !0, value: e }), 2 & r && "string" != typeof e) for (var n in e) l.d(t, n, function (r) { return e[r] }.bind(null, n)); return t }, l.n = function (e) { var r = e && e.__esModule ? function () { return e.default } : function () { return e }; return l.d(r, "a", r), r }, l.o = function (e, r) { return Object.prototype.hasOwnProperty.call(e, r) }, l.p = "./"; var f = this.webpackJsonpdemo = this.webpackJsonpdemo || [], i = f.push.bind(f); f.push = r, f = f.slice(); for (var a = 0; a < f.length; a++)r(f[a]); var p = i; t() }([])</script>
    <script src="/static/js/2.1902eda2.chunk.js"></script>
    <script src="/static/js/main.cbf35db7.chunk.js"></script>
</body>

</html>

It is found that the CSS and JS files are referenced using absolute paths, which is a common issue with webpack packaging. Change /static to ./static, and then run the project again. The page will display correctly without any issues.

However, manually modifying the relative paths in actual projects is not only troublesome but also prone to other problems. Therefore, directly modify the project's package.json configuration file by adding "homepage": ".".

// package.json

{
  "name": "demo",
  "version": "0.1.0",
  "private": true,
  "homepage": ".",  // Add this line
  "dependencies": {
    "@babel/core": "7.12.3",
    ...

Then run npm run build again, and there will be no issues when running the packaged files.

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.