【问题标题】:React-loadable gets chunks only from relative pathReact-loadable 仅从相对路径获取块
【发布时间】:2019-02-19 02:25:03
【问题描述】:

我正在使用 webpack 4.6.0babel 7.0.0 构建 react 16.3 网络应用程序。

我的 js 资产在 https://domain/js/app.bundle.js 下

我使用 react-loadable 将组件拆分成块。 这些块也位于 /js/ 下,但是,react 从相对路径中获取它们,即:

https: //domain/1.app.bundle.js

这当然行不通。

问题:如何告诉 react 或 webpack 使用绝对路径 /js/ 来获取块?

这是我的 webpack.config.json

var path = require('path');

module.exports = {
    mode: 'production',
    devtool: 'eval-source-map',
    entry: './js/src/app.js',
    watch: false,
    watchOptions: {
        aggregateTimeout: 300,
        poll: 1000,
        ignored: /node_modules/
    },
    output: {
        path: path.resolve(__dirname, "output/js"),
        filename: 'app.bundle.js',
        chunkFilename: '[name].app.bundle.js',
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: path.resolve(__dirname, "js/src"),
                query: {
                    presets: ['@babel/preset-react'],//, 'es2015'],
                    plugins: [
                        'transform-class-properties',
                        '@babel/plugin-syntax-dynamic-import'
                    ]
                }
            },
            {
                test: /\.scss$/,
                include: path.resolve(__dirname, "sass"),
                loaders: ['style', 'css', 'sass']
            }
        ]
    }
};

这是我在 package.json 中的包

    "@babel/plugin-syntax-dynamic-import": "^7.0.0",
    "@material-ui/core": "^3.0.3",
    "@material-ui/icons": "^3.0.1",
    "@babel/cli": "^7.0.0",
    "@babel/core": "^7.0.1",
    "babel-loader": "^8.0.2",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-preset-es2015": "^6.9.0",
    "@babel/preset-react": "^7.0.0",
    "node-sass": "^4.9.2",
    "react": "^16.3.2",
    "react-addons-css-transition-group": "^15.6.2",
    "react-dom": "^16.3.2",
    "react-loadable": "^5.5.0",
    "react-swipeable-views": "^0.12.13",
    "react-tap-event-plugin": "^3.0.3",
    "scss-compile": "^0.1.7",
    "webpack": "^4.6.0",
    "webpack-cli": "^2.1.2",

这是我为测试代码拆分而更改的反应代码

import React from 'react';
import Loadable from 'react-loadable';

const PV = Loadable({
    loader: () => import('./PV/PV'),
    loading: () => <div>Loading...</div>,
});

【问题讨论】:

    标签: javascript reactjs webpack babeljs react-loadable


    【解决方案1】:

    解决了

    output: {
        path: path.resolve(__dirname, "output/js"),
        filename: 'app.bundle.js',
        chunkFilename: '[name].app.bundle.js',
        publicPath: '/js/'  <------------------ this was the missing piece.
    },
    

    【讨论】:

    • 现在 publicPath 设置为 '/js/' ,你的所有其他静态资产(图像/字体)不会开始失败,因为 webpack 现在会尝试根据这个路径解析它们吗?跨度>
    • @gaurav5430 我无法回答你。在这个项目中,webpack 不输出除了 javascript 包之外的任何东西。但是,您正在谈论另一个部分,即 dev-server,它具有与 apache 中的文档根等效的属性 contentBase。那是您的公共资产和 index.html 所在的位置。据我了解,PublicPath 是 js 包所在的位置。
    • 据我了解,在开发服务器中使用 contentBase 来更改开发服务器可能在内存之外查找静态文件和块的位置。另一方面,publicPath 就像是说应用程序中的所有相对导入都将在生成的包中以“/js/”为前缀。因此,如果默认情况下 webpack 是在 build 目录中查找文件,现在它会在 public/js 目录中查找文件,这就是为什么我建议您现在可以从 /js/ 解析所有相对 url。不过感谢您的回复。真的很感激。
    • 是的,我确实使用 /js 作为前缀,自从它起作用后就没有考虑过这种关系。谢谢解释
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2011-12-11
    • 2011-08-11
    • 2010-09-21
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多