I am using Webpack 5.20.1, with Asset Modules feature.
When I import my assets, I got an "undefined" instead of the URL of the expected resource.
webpack.config.js
module.exports = {
...
module: {
rules: [
{
test: /\.(gif|png|jpe?g|svg|xml|json)$/i,
type: 'asset/resource'
}
]
},
...
MyFile.ts
import * as Phaser from 'phaser';
import sky from '../assets/sky.png';
export class GameScene extends Phaser.Scene {
public preload() {
console.log("##### sky", sky); // got undefined
this.load.image('sky', sky);
}
}
I thought this use was legit.
Exploring transpiled bundle, I find an use of the path to default, when then asset is use. But no default in the export when the asset is build as module :
app.bundle.js (when using the asset)
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.GameScene = void 0;
var Phaser = __webpack_require__(/*! phaser */ "./node_modules/phaser/dist/phaser.js");
var sky_png_1 = __webpack_require__(/*! ../assets/sky.png */ "./src/assets/sky.png");
var GameScene = /** @class */ (function (_super) {
__extends(GameScene , _super);
function GameScene () {
var _this = _super.call(this, sceneConfig) || this;
_this.score = 0;
return _this;
}
GargoylesScene.prototype.preload = function () {
console.log("##### sky", sky_png_1.default); // There is 'default' keyword
this.load.image('sky', sky_png_1.default); // There is 'default' keyword
};
return GameScene;
}(Phaser.Scene));
exports.GameScene = GameScene;
app.bundle.js (when defined asset as module)
/***/ "./src/assets/sky.png":
/*!****************************!*\
!*** ./src/assets/sky.png ***!
\****************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
module.exports = __webpack_require__.p + "assets/47a86b192804f1490bee.png"; // There is NO 'default' keyword
/***/ }),
Where did I go wrong ?
How can I configure webpack to load my resources as expected?