代码之家  ›  专栏  ›  技术社区  ›  Abion47

从Vue的生成/网页包阶段排除工作程序代码

  •  2
  • Abion47  · 技术社区  · 7 年前

    我正在为一个客户准备一个录音应用程序。其中两个要求是它需要使用vue和无损格式的记录来运行,所以我选择flac方法。我找到一个 speech-to-flac library 在github上,并试图将其移植到vue,但在任何时候引用工作代码时,让vue编译都有问题。

    一种方法是尝试导入它,就像我使用的wav编码器的工作示例一样。 import 功能:

    import EncoderWav from './encoder-wav-worker.js'
    
    ...
    
    createWorker (fn) {
        var js = fn
            .toString()
            .replace(/^function\s*\(\)\s*{/, '')
            .replace(/}$/, '')
        var blob = new Blob([js])
        return new Worker(URL.createObjectURL(blob))
    }
    

    (不是我的代码,我只知道它适用于wav编码器。)

    如果我用flac编码器试试这个,我会得到这样的信息:

    未找到此依赖项:

    *fs in./src/recording/flac-encoder.js中的fs

    要安装它,可以运行:npm install--save fs

    运行安装脚本,然后重新生成会导致相同的错误。我的猜测是Vue的Webpack模块试图解决flac库代码的依赖性,但是该代码应该在WebWorker的上下文中运行,所以很有可能它会包含常规浏览器上下文无法理解的依赖性。

    为了完整起见,我还尝试将工作程序代码作为url而不是blob提供给工作程序:

    createWorker (fn) {
        return new Worker('./flac-encoder.js');
    }
    

    这样做的话,当我试图创建worker时,会得到一个404错误。无论 flac-encoder.js 与执行该代码的记录器实用程序脚本位于同一目录中,位于整个项目的根目录中,或介于两者之间的任何位置。

    我是否可以告诉vue/webpack忽略这些文件以进行依赖关系检查,但仍包括它们?

    1 回复  |  直到 7 年前
        1
  •  3
  •   ghybs    7 年前

    如果你用过 vue-webpack-boilerplate 初始化项目(即通过vue cli $ vue init webpack my-project ),你应该有一个 static 位于项目根目录的文件夹。

    你应该把你的 flac-encoder.js 文件并在工作机初始化中引用它:

    new Worker('./static/flac-encoder.js');
    

    如果该工作人员依赖于其他文件(即使用 importScripts ,将这些文件也放入 静止的 文件夹。

    代码沙盒示例: https://codesandbox.io/s/o5qwl43k7y

    (但请注意,codesandbox配置似乎将静态文件直接放在构建的根目录上,而不是放在 静止的 目标文件夹)。