【问题标题】:Webpack angular 4 file-loaderWebpack Angular 4 文件加载器
【发布时间】:2018-05-21 11:23:34
【问题描述】:

我正在使用angular-starter

现在我正在尝试部署到测试服务器。我的问题是位于src/assets/img 的图像。

我的 Angular 4 代码(组件和视图):

// Component
public ngOnInit() {
  this.logoUrl = require('../../assets/img/co-logo.png');
}

// View
<img flex src="{{logoUrl}}" alt="Logo">

到这里为止我没有任何问题。

我的问题是理解 webpack 的行为。

我已经安装了文件加载器,并将这段代码(并尝试了很多其他选项)添加到 webpack.common.js: 已尝试使用此选项:

{
  test: /\.(png|jpe?g|gif)$/,
  use: [
    {
      loader: 'file-loader',
      options: {
        outputPath: '/assets/img/',
        publicPath: '/',
        name: '[hash]_[name].[ext]',
      }
    }
  ],
}

输出看起来一点也不差,我明白了:

 » app  
  » dist  
   » assets  
    » img  
    - b1249ef43aea4c57bcc7782f6a0ebb99_co-logo.png

问题

加载页面时,如果我检查图像的 url,它只会检索到我:

/app/dist/01b401fa5bdbfdc4e3daf75d72fa76b9.png

我期待的是这样的:

/app/dist/assets/img/b1249ef43aea4c57bcc7782f6a0ebb99_co-logo.png

至少我已经尝试过使用以下参数:

publicPath: '/assets/img/'
name: '/assets/img/[hash]_[name].[ext]'

谁能帮我解决这个问题?从昨天开始我一直在努力解决这个问题:/

谢谢大家!

编辑:webpack code

【问题讨论】:

    标签: javascript angular webpack webpack-file-loader


    【解决方案1】:

    在解决问题的同时让事情变得清晰和简单

    1. 确保 webpack 配置有 output.path 指向 目标文件夹。我相信它的app 文件夹在你的情况下。请注意 output.path 采用绝对路径,即使用 path 模块。
    2. file-loader 中取出publicPath,直到我们解决问题。
    3. 使用file-loaderoutputPath 的相对路径,即assets/img

    完成这些更改后,一切都会按预期进行。然后您可以根据需要尝试将publicPath 放回file-loader

    一般来说,我不会使用publicPath,除非我有不同的环境需要照顾。产品和开发。但这只是我。

    【讨论】:

    • 你好。 output.path = helpers.root('dist') { test: /\.(jpg|png|gif)$/, use: [ { loader: 'file-loader', options: { outputPath: 'assets/img/', name: '[hash].[name].[ext]' } } ] }, 但是,有了这个` `我现在得到assets/img/b1249ef43aea4c57bcc7782f6a0ebb99.co-logo.png 而不是app/dist/assets/img/b1249ef43aea4c57bcc7782f6a0ebb99.co-logo.png 谢谢。
    • 上次我使用它时它有效,但现在我仍然收到最后一条评论问题:/
    • 嗯,请编辑原始帖子以包含您当前的完整 webpack 配置。
    • 你好。在第一篇文章的末尾。谢谢。
    • 不幸的是,您附加的配置是部分配置。在构建时还会合并其他配置选项。尽管如此,该文件中file-loader 的配置在测试时仍按预期工作。接下来要看的是找出合并后有效的webpack配置。你能 1. 在同一个文件的末尾添加console.log(JSON.stringify(module.exports(), null, 2));。 2. 运行 webpack build 3. 查看它记录到控制台的有效 webpack 配置。如果我不得不猜测,在合并期间必须有一些覆盖。
    猜你喜欢
    • 2018-05-15
    • 2019-05-23
    • 1970-01-01
    • 2018-09-12
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多