Как запустить работника с зависимостями в javascript и sveltekit?

Я пытаюсь использовать модуль zxcvbn в своем проекте. Это нормально для паролей длиной до 50 символов. Ведь оценка каждого пароля занимает слишком много времени.

Я пытаюсь использовать работников для запуска функции и обновления состояния в sveltekit. Код выглядит следующим образом.

      // src/generator/+page.svelte

onMount(() => {
    const w = new Worker("src/routes/generator/worker");
    w.postMessage("password");
    w.onmessage = function (event) {
      console.log(event.data);
    };
  });
      // src/generator/worker.ts

import zxcvbn from "zxcvbn";    // throws error "Uncaught SyntaxError: Cannot use import statement outside a module (at worker.ts:1:1)"

const passwordStrength = (password: string) => {
  const res = zxcvbn(password);
  postMessage(res);
};

self.onmessage = (e) => {
  passwordStrength(e.data);
};

Я новичок в Sveltekit и javascript/typescript в целом, поэтому любые предложения приветствуются.

2 ответа

Вы могли бы добавить атрибутtype="module"на каждогоscriptтег, который вы использовали. Посмотрите пример ниже:

      <script src="/path/to/your/amazing/script.js" type="module"></script>

В итоге я импортировал работника как такового

      // src/generator/+page.svelte

import MyWorker from "src/generator/worker?worker";


const w = new MyWorker();
w.postMessage("password");
w.onmessage = function (event) {
   console.log(event.data);
};
      // src/generator/worker.ts

import zxcvbn from "zxcvbn";

const passwordStrength = (password: string) => {
  const res = zxcvbn(password);
  postMessage(res);
};

self.onmessage = (e) => {
  passwordStrength(e.data);
};

Vite поддерживает прямой импорт работника. Тогда я мог бы запустить его без проблем, и он не блокировал бы другой JavaScript. Другое решение, которое я видел, заключалось в том, чтобы сделать рабочего такимnew Worker("/my/path/workerfile?worker", {type: "module"})

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Решение/объяснение может быть не на 100% правильным, поскольку я все еще учусь.

Другие вопросы по тегам