1

I am new in WebPack and Angular2. I'm trying to reproduce the example, which contains the following code

<img src="assets/demo/images/car/{{car.brand}}.gif" />

When running webpack --config webpack.config.js I get the following error

Module not found: Error: Cannot resolve 'file' or 'directory' ./assets/demo/images/car/{{car.brand}}.gif in C:\Users\User\Documents\Dev\1\ClientApp\app\demo\view
 @ ./ClientApp/app/demo/view/sampledemo.html 1:9835-9888 1:11867-11920 1:15789-15842

I understand that WebPack is trying get do not existing file because Angular2 use the binding /{{car.brand}}.gif. But how to fix it?

enter image description here

WebPack Config

var isDevBuild = process.argv.indexOf('--env.prod') < 0;
var path = require('path');
var webpack = require('webpack');
var merge = require('webpack-merge');

// Configuration in common to both client-side and server-side bundles
var sharedConfig = {
    context: __dirname,
    resolve: { extensions: [ '', '.js', '.ts' ] },
    output: {
        filename: '[name].js',
        publicPath: '/dist/' // Webpack dev middleware, if enabled, handles requests for this URL prefix
    },
    module: {
        loaders: [
            { test: /\.ts$/, include: /ClientApp/, loaders: ['ts-loader?silent=true', 'angular2-template-loader'] },
            { test: /\.html$/, loader: 'html-loader?minimize=false' },
            { test: /\.css$/, loader: 'to-string-loader!css-loader' },
            { test: /\.(png|jpg|jpeg|gif|svg)$/, loader: 'url-loader', query: { limit: 25000 } },
            { test: /\.json$/, loader: 'json-loader' },
            { test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/, loaders: ['file-loader'] },
        ]
    }
};

// Configuration for client-side bundle suitable for running in browsers
var clientBundleOutputDir = './wwwroot/dist';
var clientBundleConfig = merge(sharedConfig, {
    entry: { 'main-client': './ClientApp/boot-client.ts' },
    output: { path: path.join(__dirname, clientBundleOutputDir) },
    plugins: [
        new webpack.DllReferencePlugin({
            context: __dirname,
            manifest: require('./wwwroot/dist/vendor-manifest.json')
        })
    ].concat(isDevBuild ? [
        // Plugins that apply in development builds only
        new webpack.SourceMapDevToolPlugin({
            filename: '[file].map', // Remove this line if you prefer inline source maps
            moduleFilenameTemplate: path.relative(clientBundleOutputDir, '[resourcePath]') // Point sourcemap entries to the original file locations on disk
        })
    ] : [
        // Plugins that apply in production builds only
        new webpack.optimize.OccurenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin()
    ])
});

// Configuration for server-side (prerendering) bundle suitable for running in Node
var serverBundleConfig = merge(sharedConfig, {
    resolve: { packageMains: ['main'] },
    entry: { 'main-server': './ClientApp/boot-server.ts' },
    plugins: [
        new webpack.DllReferencePlugin({
            context: __dirname,
            manifest: require('./ClientApp/dist/vendor-manifest.json'),
            sourceType: 'commonjs2',
            name: './vendor'
        })
    ],
    output: {
        libraryTarget: 'commonjs',
        path: path.join(__dirname, './ClientApp/dist')
    },
    target: 'node',
    devtool: 'inline-source-map'
});

module.exports = [clientBundleConfig, serverBundleConfig];
2
  • this html is in a component? Commented Feb 5, 2017 at 15:19
  • Yes, Added a screenshot Commented Feb 5, 2017 at 15:22

1 Answer 1

1

This is not really webpack issue.

In your component class have a method that returns the url:

getUrl(){
return "assets/demo/images/car/"+ this.car.brand+".gif";
}

In your html use [] to bind src to the function:

<img [src]="getUrl()" />

In your case it was taking {{car.brand}} as just a string and part of the path.

Sign up to request clarification or add additional context in comments.

2 Comments

Okay but why WebPack generates errors "Module not found: Error: Cannot resolve 'file' or 'directory'" and how to fix it
without binding with [] it takes the string literal not the value of car.brand which is obviously not the intended path and no file exists there.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.