gpt4 book ai didi

angularjs - 使用 Webpack 和 AngularJS 在生产中图像 GET 抛出 404 错误

转载 作者:行者123 更新时间:2023-12-02 23:28:42 24 4
gpt4 key购买 nike

经过多次尝试后,我遇到了一个无法解决的难题:

I'm unable to load static images in production;

everything is fine while developing (npm run serve), even when serving files from dist (npm run serve:dist)

版本

网络包:3.12.0

文件加载器:1.1.11

网址加载器:1.1.2

AngularJS:1.6.9

开发时:

我的index.html包含这一行,如果没有,webpack将无法加载

<base href="/"></base>

而我的 AngularJS 配置 block 包含

$locationProvider.hashPrefix('');

我使用这样的 URL http://localhost:3000/#/appName/listingComponent/users

我可以使用ng-src(有时它是动态绑定(bind)的)来查看每个图像,如下所示

<img ng-src="app/images/image1.png">

文件夹结构是这样的

ui/
├── conf/
│ ├── browsersync-dist.conf.js
│ ├── browsersync.conf.js
│ ├── gulp.conf.js
│ ├── webpack-dist.conf.js
│ └── webpack.conf.js
├── gulp_tasks/
│ ├── browsersync.js
│ ├── misc.js
│ └── webpack.js
├── node_modules/
├── src/
│ ├── app/
│ │ ├── config.js //global variables
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── index.less
│ │ ├── images/ <--
│ │ ├── actual_app_folders/
│ │ └── ...
├── gulpfile.js
└── package.json

在我的 webpack-dist.js 中,我有以下内容

module.exports = {
module: {
loaders: [
{
test: /\.json$/,
loaders: [
'json-loader'
]
},
{
test: /\.js$/,
exclude: [
/node_modules/
],
loader: 'babel-loader',
options: {
presets: ['es2015']
}
},
{
test: /\.js$/,
exclude: [
/node_modules/
],
loaders: [
'eslint-loader'
],
enforce: 'pre'
},
{
test: /\.(css|less)$/,
exclude: '/node_modules/roboto-fontface/',
loaders: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader?minimize!less-loader!postcss-loader'
})
},
{
test: /\.html$/,
loaders: [
'html-loader'
]
},
{
test: /\.(jpe?g|png|gif|svg|eot|woff|ttf|svg|woff2)$/,
loader: 'url-loader?name=[name].[ext]'
}
]
},
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
FailPlugin,
new HtmlWebpackPlugin({
template: conf.path.src('/app/index.html'),
inject: true,
chunksSortMode: 'dependency'
}),
new webpack.optimize.CommonsChunkPlugin({
name: ['vendors', 'config'],
minChunks: Infinity
}),
new ExtractTextPlugin('index-[contenthash].css'),
new webpack.LoaderOptionsPlugin({
options: {
postcss: () => [autoprefixer]
}
})
],
output: {
path: conf.paths.dist,
filename: function(output) {
return output['chunk']['name'] === 'config' ? '[name].js' : '[name]-[hash].js';
},
chunkFilename: '[name]-[hash].js'
},
entry: {
app: `./${conf.path.src('/app/index')}`,
config: `./${conf.path.src('/app/config')}`,
vendors: Object.keys(pkg.dependencies).concat(['webpack-material-design-icons'])
}
};

生产中

构建过程添加 /customer_company_name/our_company_name/路径的前缀,变成

http://<customer_domain>:<domain_port>/customer_company_name/our_company_name/#/appName/listingComponent/users

而文件夹结构是这样的

our_company_name/
├── app/
│ ├── images/ <--
│ │ ├── image1.png
│ │ └── image2.png
├── app-<random_number>.js
├── config.js
├── favicon.ico
├── index.html
├── index-<random_number>.css
└── vendors.js

THE PROBLEM

Now every time there's a pic to be shown, the browser gets a 404 error like this

GET http://<customer_domain>:<domain_port>/app/images/image1.png 404 (Not Found)

虽然请求应该这样提出

GET http://<customer_domain>:<domain_port>/customer_company_name/our_company_name/index.js

就像应用程序中的所有其他文件一样。

我尝试了什么

到目前为止,以下方法都没有帮助:

  1. 在以下构建过程中更改基本标签 <base href="/customer_company_name/our_company_name/"></base> (目前保留)
  2. 明确要求将图片与 index.js 中的所有其他文件一起 require('./images/ODM_trasp48px.png'); (目前保留)
  3. 在 webpack 中使用 publicPath output.publicPath: '/customer_company_name/our_company_name/'还有output.publicPath: '/'
  4. 使用 file-loader 代替 url-loader(目前保留)
  5. 使用文件加载器 options: { useRelativePath: true }
  6. 使用文件加载器 options: { publicPath: /customer_company_name/our_company_name/ }

小伙子们,你们能帮帮我吗?

最佳答案

我认为问题不在于替换模式,因为它适用于其他文件类型,但事实上 webpack 不知道如何处理 ng-src 属性。我认为它默认只查看 img 的 src 属性。您可以更改它以识别 ng-src,例如:

module.exports = {
module: {
loaders: [
...
{
test: /\.html$/,
loaders: [ "html-loader?" + JSON.stringify({ attrs: ["img:src", "img:ng-src"] })]
},
...
],
...

替代语法:

{
test: /\.html$/,
loaders: [ "html-loader?attrs=img:src img:ng-src" ]
}

在更改配置之前,您可以通过检查替换当前是否正确地使用纯静态 的 img 标签来测试这是否是原因。

关于angularjs - 使用 Webpack 和 AngularJS 在生产中图像 GET 抛出 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com