forked from external-repos/squoosh
Succesfully load wasm file via webpack
This commit is contained in:
2
codecs/mozjpeg_enc/mozjpeg_enc.d.ts
vendored
2
codecs/mozjpeg_enc/mozjpeg_enc.d.ts
vendored
@@ -1 +1 @@
|
|||||||
export default function(): EmscriptenWasm.Module;
|
export default function(opts: {}): EmscriptenWasm.Module;
|
||||||
|
|||||||
10
package-lock.json
generated
10
package-lock.json
generated
@@ -4736,6 +4736,16 @@
|
|||||||
"object-assign": "^4.0.1"
|
"object-assign": "^4.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"file-loader": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"loader-utils": "^1.0.2",
|
||||||
|
"schema-utils": "^0.4.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"filename-regex": {
|
"filename-regex": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
"eslint-plugin-react": "^7.7.0",
|
"eslint-plugin-react": "^7.7.0",
|
||||||
"eslint-plugin-standard": "^3.0.1",
|
"eslint-plugin-standard": "^3.0.1",
|
||||||
"exports-loader": "^0.7.0",
|
"exports-loader": "^0.7.0",
|
||||||
|
"file-loader": "^1.1.11",
|
||||||
"html-webpack-plugin": "^3.0.6",
|
"html-webpack-plugin": "^3.0.6",
|
||||||
"if-env": "^1.0.4",
|
"if-env": "^1.0.4",
|
||||||
"loader-utils": "^1.1.0",
|
"loader-utils": "^1.1.0",
|
||||||
|
|||||||
@@ -1,19 +1,33 @@
|
|||||||
import {Encoder} from './codec';
|
import {Encoder} from './codec';
|
||||||
|
|
||||||
import mozjpeg_enc from '../../../codecs/mozjpeg_enc/mozjpeg_enc';
|
import mozjpeg_enc from '../../../codecs/mozjpeg_enc/mozjpeg_enc';
|
||||||
|
// Using require() so TypeScript doesn’t complain about this not being a module.
|
||||||
|
const wasmBinaryUrl = require('../../../codecs/mozjpeg_enc/mozjpeg_enc.wasm');
|
||||||
|
|
||||||
export class MozJpegEncoder implements Encoder {
|
export class MozJpegEncoder implements Encoder {
|
||||||
private emscriptenModule: Promise<EmscriptenWasm.Module>;
|
private emscriptenModule: Promise<EmscriptenWasm.Module>;
|
||||||
constructor() {
|
constructor() {
|
||||||
this.emscriptenModule = new Promise(resolve => {
|
this.emscriptenModule = new Promise(resolve => {
|
||||||
console.log(mozjpeg_enc);
|
const m = mozjpeg_enc({
|
||||||
const m = mozjpeg_enc();
|
// Just to be safe, don’t automatically invoke any wasm functions
|
||||||
m.onRuntimeInitialized = () => resolve(m);
|
// noInitialRun: false,
|
||||||
|
locateFile(url: string): string {
|
||||||
|
// Redirect the request for the wasm binary to whatever webpack gave us.
|
||||||
|
if(url.endsWith('.wasm')) {
|
||||||
|
return wasmBinaryUrl;
|
||||||
|
}
|
||||||
|
return url;
|
||||||
|
},
|
||||||
|
onRuntimeInitialized() {
|
||||||
|
resolve(m);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async encode(bitmap: ImageBitmap): Promise<ArrayBuffer> {
|
async encode(bitmap: ImageBitmap): Promise<ArrayBuffer> {
|
||||||
console.log('encoding!');
|
console.log('awaiting module');
|
||||||
|
debugger;
|
||||||
const m = await this.emscriptenModule;
|
const m = await this.emscriptenModule;
|
||||||
console.log(m);
|
console.log(m);
|
||||||
return Promise.resolve(<ArrayBuffer>new Uint8Array([1,2,3]).buffer);
|
return Promise.resolve(<ArrayBuffer>new Uint8Array([1,2,3]).buffer);
|
||||||
|
|||||||
@@ -48,6 +48,18 @@ module.exports = function (_, env) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
|
// This is needed to make webpack NOT process wasm files.
|
||||||
|
// See https://github.com/webpack/webpack/issues/6725
|
||||||
|
defaultRules: [
|
||||||
|
{
|
||||||
|
type: "javascript/auto",
|
||||||
|
resolve: {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.json$/i,
|
||||||
|
type: "json"
|
||||||
|
},
|
||||||
|
],
|
||||||
rules: [
|
rules: [
|
||||||
{
|
{
|
||||||
test: /\.(scss|sass)$/,
|
test: /\.(scss|sass)$/,
|
||||||
@@ -110,8 +122,12 @@ module.exports = function (_, env) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
// All the codec files define a global with the same name as their file name. `exports-loader` attaches those to `module.exports`.
|
// All the codec files define a global with the same name as their file name. `exports-loader` attaches those to `module.exports`.
|
||||||
test: /\/codec\/.*\.js$/,
|
test: /\/codecs\/.*\.js$/,
|
||||||
loader: 'exports-loader',
|
loader: 'exports-loader',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\/codecs\/.*\.wasm$/,
|
||||||
|
loader: 'file-loader',
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user