Как выполнить строгую проверку типов MIME для wasm? - PullRequest
0 голосов
/ 29 сентября 2019

Я получил модуль веб-сборки для компиляции с использованием emscripten.Сейчас я пытаюсь разместить его на веб-странице с помощью expressjs.

Я пытался выполнить эту суть при включении веб-сборки через веб-пакет, включая модификацию, которую я обнаружил, поскольку эта суть немного старше.

Веб-пакет выглядит следующим образом:

const path = require('path');

module.exports = {
  optimization: {
    mangleWasmImports: false
  },
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, './dist/'),
    filename: 'dynamic-graph.bundle.js'
  },
  target: "web",
  module: {
    rules: [
      // Emscripten JS files define a global. With `exports-loader` we can 
      // load these files correctly (provided the global’s name is the same
      // as the file name).
      {
        test: /fourd\.js$/,
        loader: "exports-loader"
      },
      // wasm files should not be processed but just be emitted and we want
      // to have their public URL.
      {
        test: /fourd\.wasm$/,
        type: "javascript/auto",
        loader: "file-loader",
        options: {
          publicPath: "dist/"
        }
      }
    ]
  }
}

Я настроил https на dev-сервере, потому что я знаю, что иногда это вызывает проблемы.Это самозаверяющий сертификат, но Chrome и Firefox позволяют мне обойти это.

const express = require('express')
const fs = require('fs')
express.static.mime.types['wasm'] = 'application/wasm'
const https = require('https')
const app = express()

app.use('/', express.static(__dirname))
app.use((req, res, next) => {
  res.header('X-Content-Type-Options', 'nosniff')
  next()
})
https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app).listen(8000, () => {
  console.log('Listening...')
})

В предыдущей версии я мог использовать Module.onRuntimeInitialized для ожидания создания экземпляра модуля wasm.Этот код все еще работает, я скомпилировал веб-пакет, используя те же флаги em ++, что и раньше, а именно: -std=c++11 -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s SAFE_HEAP=1 -O0 -g4 -s ASSERTIONS=1

Ошибка, которую я получаю в браузере, следующая: Failed to load module script: The server responded with a non-JavaScript MIME type of "application/wasm". Strict MIME type checking is enforced for module scripts per HTML spec., которая бросает меня в цикл, потому что ядумал, что application / wasm - это именно то, что должен быть тип MIME.

...