Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向Netlify提供serve命令_Javascript_Gatsby_Netlify - Fatal编程技术网

Javascript 向Netlify提供serve命令

Javascript 向Netlify提供serve命令,javascript,gatsby,netlify,Javascript,Gatsby,Netlify,我正在网络上运行盖茨比应用程序。但我不想从根url(/)提供服务,而是从路径(即/blog)提供所有页面和资产 对于这个用例,完美的匹配似乎是必要的 它在本地运行得非常好,所有内容都是从/blog提供的,我的所有链接都是/blog/link1等等 这是my package.json: "scripts": { "build": "gatsby build --prefix-paths", "format&quo

我正在网络上运行盖茨比应用程序。但我不想从根url(
/
)提供服务,而是从路径(即
/blog
)提供所有页面和资产

对于这个用例,完美的匹配似乎是必要的

它在本地运行得非常好,所有内容都是从
/blog
提供的,我的所有链接都是
/blog/link1
等等

这是my package.json:

"scripts": {
    "build": "gatsby build --prefix-paths",
    "format": "prettier --write src/**/*.{js,jsx}",
    "start": "gatsby develop  --prefix-paths",
    "serve": "gatsby serve --prefix-paths",
    "now-build": "gatsby build --prefix-paths"
  }
我将此配置添加到我的gatsby-config.js中:

module.exports = {
  pathPrefix: `/blog`,
  ......
}
默认情况下,如果未传递
--前缀路径
标志,则此前缀将被忽略,根url(
/
)将作为起点

就我的情况而言,我在当地这样做:

gatsby build --prefix-paths && gatsby serve --prefix-paths
瞧,我让一切都正常运行(一切都是从
/blog
提供的)

但我注意到netlify上有奇怪的事情:

  • /blog/link1
    不再像本地(无页面呈现)那样工作。如果我像
    /link1
    那样删除博客,它会呈现良好效果

  • 当我检查各种资产404的ex时:
    /blog/page data/customers/page data.json
    我意识到应用程序正在尝试从正确的位置加载资产,但它们不在那里

  • 这让我相信build命令是正确执行的(我还在netlify用户界面中提供了build命令),并且我可以在构建日志中看到它的执行

    我认为执行serve命令时没有前缀。此外,通过这样做,我成功地在本地重现了相同的行为:

    gatsby build --prefix-paths
    gatsby serve
    
    如何在生产中修改netlify上的
    service
    命令

    更新:

    我将接受下面的Frans解决方案,因为它是有效的。但我只是想给在我之后苦苦挣扎的人们一些提示

    无论出于何种原因,netlify完全忽略package.json中的命令,这就是我现在得到的:

    "scripts": {
        "build": "gatsby build --prefix-paths && npm run move",
        "move": "cd public && mkdir blog | mv * blog",
        "format": "prettier --write src/**/*.{js,jsx}",
        "start": "gatsby develop  --prefix-paths",
        "serve": "gatsby serve --prefix-paths",
        "now-build": "gatsby build  --prefix-paths"
      }
    
    我不得不在Netlify UI上修改build命令,如下面的Frans截图所示。然后把这个命令放到那里
    gatsby build--prefix path&&npm run move


    我不知道为什么盖茨比要求明确地传递这个标志,不管他们的理由是什么,我不喜欢他们,因为这使它更难部署。对我来说,如果配置在那里,使用它会更有意义。在配置之外使用标志是一种过激行为(不知道他们为什么这样做的更多上下文)。

    您在Netlify backoffice中更改了它吗

    我可以通过在
    --前缀路径中添加后缀来更改deploy命令

    有了新的更新信息,恐怕您只能选择使用命令脚本将编译后的文件夹移动到
    /blog
    中:

    "build": "npm run clean && gatsby build --prefix-paths && npm run move",
    "move": "cd public && mkdir blog | mv * blog"
    

    类似的问题也被解释了。

    您是否使用了
    盖茨比插件netlify
    ?@Z.Zlatev不,我不是,是吗?它能做什么?它能如何帮助我?谢谢,它将根据您的前缀为netlify生成重写规则。@Z.Zlatev这不是我想要的。我希望从现在开始,直到永远,我的所有路由都是
    /blog/anylink
    ,我不希望为我添加的每个新路由添加重写规则。我有什么遗漏吗?我以前从未使用过这个,我可能忽略了显而易见的,你能在答案中给我举个例子吗?或者给我指对地方。谢谢@Ferran Buireu。构建阶段确实工作正常,是的,我已经改变了这一点。正如我在文章中所描述的,构建阶段是成功的,但是没有正确调用serve,我可以在本地重现相同的行为。当我使用标志(--prefix path)构建而不使用标志时,行为100%与您检查的相同:?我已经更新了答案。事实上,我已经多次阅读了这篇文章和类似的文章,并且已经尝试过了。但是你再次链接它,让我意识到我的package.json中的
    build
    被忽略了。所以,谢谢你,希望你的答案能得到更多的支持,我在更新中为那些努力解决这个问题的人们添加了一些额外的信息