diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index af02e5192..c0e1c6b2b 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -1,6 +1,7 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; // 不需要一起打包的话则不需要引入这行 -import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; +// 根据实际需求传入inline属性,true -> blob url,false -> servicePath +import { workerUrl } from 'fui-worker?inline=true!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { private worker: ${WorkerName}MainThreadWorker; @@ -23,6 +24,7 @@ export class ${WorkerName}WorkerHelper { /** * 格式化worker url,比如补充一些环境信息到参数里 + * 通过 #hash 传入blob url或 ?params 传入servicePath * @param url worker url */ private urlFormatter(url: string) { diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index 9affe81f4..fd91bb829 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -43,7 +43,7 @@ function loader() { const entryFileName = `${FileNamePrefix}index`; // 获取传递给 loader 的 options - loaderUtils.getOptions(this) || {}; + const options = loaderUtils.getOptions(this) || {}; // 创建 childCompiler, 用于实现 worker 构建为独立 js 资源 const childCompiler = this._compilation.createChildCompiler(WorkerLoaderName, { @@ -92,15 +92,24 @@ function loader() { return callback(error); } - return callback( - null, - // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 - // 添加 @ts-nocheck 避免 ts-check 报错 - `// @ts-nocheck - const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; - export const workerUrl = servicePath; - ` - ); + // 支持blob url形式 + return options.inline + ? callback( + null, + // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 + // 添加 @ts-nocheck 避免 ts-check 报错 + `// @ts-nocheck + const blob = new Blob([${JSON.stringify(compilation.assets[entry].source())}]); + export const workerUrl = window.URL.createObjectURL(blob); + ` + ) + : callback( + null, + `// @ts-nocheck + const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; + export const workerUrl = servicePath; + ` + ) }); return;