0

我对 react.js 很陌生(使用 preact)并且遇到了异步路由(preact-async-router)的问题。

我的 main.js:

import { h, render } from 'preact';
import {Router, Route} from 'preact-router';
import AsyncRoute from 'preact-async-route';
import Home from './components/home.jsx';

/** @jsx h */

function getHelloWorld(){
    return System.import('./components/hello.jsx').then(module => module.default);
}

render(
    <Router>
        <Route path="/" component={Home} />
        <AsyncRoute path="/hello/:foo" component={getHelloWorld}
        loading={()=>{alert("loading...");}} />
    </Router>
, document.getElementById("app")
);

我的家.jsx:

import {h, Component} from 'preact';
import {Link} from 'preact-router';

/** @jsx h */

export default class Home extends Component {
    render() {
        return <h1>
            This is home page<br/>
            <Link href='/hello/Earth'>Earth</Link>
        </h1>;
    }
}

我的 hello.jsx:

import {h, render, Component} from 'preact';

/** @jsx h */

export default class Hello extends Component {
    render() {
        return <h1>Hello {this.props.matches.foo}!</h1>
    }
}

Webpack 创建 bundle.js 和 1.bundle.js(用于 hello.jsx)!

全部在我的资源目录中(资源目录通过 express.static 可用)。

home.jsx 已加载,链接指向 (localhost/hello/Earth)。

现在的问题是 1.bundle.js 没有被加载!浏览器(bundle.js)正在请求“/hello/1.bundle.js”下的文件,而不是“/resources/1.bundle.js”下的文件!

我该如何解决?

编辑:

现在可以了。在我的 webpack 配置中添加了带有“/resources/”的“publicPath”。谢谢!

4

3 回答 3

1

@Kian - 似乎您需要在 webpack 配置中将 output.publicPath 设置为“/”。

于 2017-03-10T18:13:36.877 回答
1

正如杰森所说,看到你在输出中有这个 publicPath ,publicPath指示必须从哪里挑选这些块。

网络包配置

于 2017-03-11T02:56:58.123 回答
0

您还可以在文件名中指定 [name] (如果您希望publicPath保留 /):

output: {
    filename: './dist/[name].bundle.js'
},

然后所有的 js bundle 文件都在dist目录下

于 2018-06-07T12:56:23.867 回答