我在我的项目中使用angular2和webpack2。
我的同事从Angular2 QuickStart启动项目,然后将其移至Webpack环境。
我使用html-loader
加载组件templats并使用url-loader
提取图像和字体:
{
test: /\.html$/,
loader: 'html-loader'
},
{
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
use: 'url-loader?limit=1000&name=assets/[name].[hash].[ext]'
},
模板是这样的:
<section class="creation-mobile">
<img src="../../../images/camera/cn/mobile/creation.jpg" alt="" class="img-cn">
<img src="../../../images/camera/en/mobile/creation.jpg" alt="" class="img-en">
</section>
当我构建它时,Webpack可以找到图像并将它们导出到asstes/
。
在我遇到这样的模板之前一切正常:
<li *ngFor="let i of [1,2,3]" class="item{{i}} m1-view">
<div class="{{lang}}-video-view">
<img src="../../../images/os/{{lang}}/medium/one-step{{i}}{{deviceRatio == 1?'':'@2x'}}.jpg">
<video class="video-medium" preload="auto" src="../../../videos/os/{{lang}}/medium/one-step-{{i}}{{deviceRatio == 1?'':'@2x'}}.mp4" [video-play]="onestepVideoState[i-1]"></video>
<img src="../../../images/os/{{lang}}/large/one-step{{i}}{{deviceRatio == 1?'':'@2x'}}.jpg">
<video class="video-large" preload="auto" src="../../../videos/os/{{lang}}/large/one-step-{{i}}{{deviceRatio == 1?'':'@2x'}}.mp4" [video-play]="onestepVideoState[i-1]"></video>
</div>
<a class="replay" [innerHTML]="os.replay.title" [ngClass]="{'active': onestepReplayState[i-1]}" (click)="onestepReplay(i-1)"></a>
</li>
像../../../images/os/{{lang}}/medium/one-step{{i}}{{deviceRatio == 1?'':'@2x'}}.jpg
这样的src包含{{lang}}
和{{i}}
以及{{deviceRatio == 1?'':'@2x'}}
来获取不同的资源,url-loader
无法解析此类网址。
我们必须展开*ngFor
并使用ngif
,写下大量<img>
代码来导入图片。
有没有办法在angular2和webpack中加载这种网址?
Add1 :抱歉忘记声明,lang
和deviceRatio
取决于浏览器环境,因此构建时值不确定。 lang
的值将是cn
和en
之一,因此我们要将../../../images/os/en/medium/..xxx.jpg
和../../../images/os/cn/medium/..xxx.jpg
加载到最终的dist目录。
答案 0 :(得分:0)
根据您的构建设置,您可以使用JS文件中的require.context
预先获取图像。
function importAll (r) {
return r.keys().map(r);
}
var modules = importAll(require.context(directory, useSubdirectories = true, regExp = /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/));
您所做的是 - 递归地要求带有图像的文件夹,它们将在所需位置可用。 点击此处:https://webpack.js.org/guides/dependency-management/#require-context