Cannot create Vue application http-server - Error: css and js files 404 Not found
Cannot create Vue application http-server - Error: css and js files 404 Not found
我想 docker 化我的 vue 应用程序,但是当我 运行 它在 docker 容器中时,浏览器中没有加载任何内容。
因为我在我的 Dockerfile 中 运行 CMD["http-server", "dist"],所以我决定在本地测试它以解决问题。
运行:
npm run serve
工作正常,我得到:
那我运行
npm run build
我认为这是因为我在应用程序中动态显示的资产目录中有一个包含 50,000 多张 jpeg 图像的海报文件夹,如下所示:
<div v-for="movie in this.recommendations" :key="movie" class="movie-card col-md-2">
<img v-if="movie['poster']=='True'" :src="getImgUrl(movie['movieId'])" v-bind:alt="pic">
And the getImgUrl function is:
getImgUrl(imgName) {
var images = require.context('../assets/posters', false, /\.jpg$/)
return images('./' + imgName + ".jpg")
}
vue/cli建议
webpack performance recommendations:
You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.
For more info visit https://webpack.js.org/guides/code-splitting/
但我不确定如何实施其中之一或
如果将图像托管在 public google 驱动器上并从那里导入它们会解决问题吗?
刚接触 vue,如有任何帮助,我们将不胜感激!
通过使用 assets 文件夹和 require
,您将所有图像捆绑到代码中,方法是将它们编码为 base64。所以当它被编译时,它正在创建巨大的块。因为图片编译成源码了。
您应该做的是将您的图像从 assets 移动到 public 目录。然后通过 HTTP 加载图像。这意味着您的代码和图像保持分离。当页面加载时,浏览器会从您的代码中单独请求图像,并将它们加载到文件中。
例如
<img v-if="movie['poster']=='True'" :src="getImgUrl(movie['movieId'])" v-bind:alt="pic">
getImgUrl(imgName) {
return `/posters/${imgName}.jpg`
}
这样你的目录结构就会变成
-public
-|--posters
-|--|--Poster1.jpg
-|--|--Poster2.jpg
-|--|--Poster3.jpg
-|--|--Poster4.jpg
etc
public 目录被过度简化为网络服务器。可以直接访问其中的任何内容。例如,如果您要将图像移动到具有上述目录结构的 public 目录,然后访问 localhost:8080/posters/Poster1.jpg,它将只加载图像,甚至不需要 Vue 路由器。
要更好、更深入地描述 public 文件夹及其作用,请查看 docs。
我想 docker 化我的 vue 应用程序,但是当我 运行 它在 docker 容器中时,浏览器中没有加载任何内容。
因为我在我的 Dockerfile 中 运行 CMD["http-server", "dist"],所以我决定在本地测试它以解决问题。
运行:
npm run serve
工作正常,我得到:
那我运行
npm run build
我认为这是因为我在应用程序中动态显示的资产目录中有一个包含 50,000 多张 jpeg 图像的海报文件夹,如下所示:
<div v-for="movie in this.recommendations" :key="movie" class="movie-card col-md-2">
<img v-if="movie['poster']=='True'" :src="getImgUrl(movie['movieId'])" v-bind:alt="pic">
And the getImgUrl function is:
getImgUrl(imgName) {
var images = require.context('../assets/posters', false, /\.jpg$/)
return images('./' + imgName + ".jpg")
}
vue/cli建议
webpack performance recommendations:
You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application.
For more info visit https://webpack.js.org/guides/code-splitting/
但我不确定如何实施其中之一或 如果将图像托管在 public google 驱动器上并从那里导入它们会解决问题吗?
刚接触 vue,如有任何帮助,我们将不胜感激!
通过使用 assets 文件夹和 require
,您将所有图像捆绑到代码中,方法是将它们编码为 base64。所以当它被编译时,它正在创建巨大的块。因为图片编译成源码了。
您应该做的是将您的图像从 assets 移动到 public 目录。然后通过 HTTP 加载图像。这意味着您的代码和图像保持分离。当页面加载时,浏览器会从您的代码中单独请求图像,并将它们加载到文件中。
例如
<img v-if="movie['poster']=='True'" :src="getImgUrl(movie['movieId'])" v-bind:alt="pic">
getImgUrl(imgName) {
return `/posters/${imgName}.jpg`
}
这样你的目录结构就会变成
-public
-|--posters
-|--|--Poster1.jpg
-|--|--Poster2.jpg
-|--|--Poster3.jpg
-|--|--Poster4.jpg
etc
public 目录被过度简化为网络服务器。可以直接访问其中的任何内容。例如,如果您要将图像移动到具有上述目录结构的 public 目录,然后访问 localhost:8080/posters/Poster1.jpg,它将只加载图像,甚至不需要 Vue 路由器。
要更好、更深入地描述 public 文件夹及其作用,请查看 docs。