/
githubmirror
/
taro
Обзор
Документация
Войти
/
githubmirror
/
taro
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/taro-loader/src/app.ts
73 строки
2 KB
Angus Chan
fix(loader): 缓存Page 和 App 源码的同时也对 sourcemap 进行缓存,并将其传递下去,避免 sourcemap 链断裂 (#18506)
31 окт 2025, 05:04
Не верифицирован
31 окт 2025, 05:04
9523842
Код
Авторство
О чём код?
import * as path from 'node:path' import { REG_POST } from './constants' import { entryCache } from './entry-cache' import { stringifyRequest } from './util' import type * as webpack from 'webpack' export default function (this: webpack.LoaderContext<any>, source: string, map?: any) { const stringify = (s: string): string => stringifyRequest(this, s) const options = this.getOptions() const { importFrameworkStatement, frameworkArgs, creator, creatorLocation, modifyInstantiate } = options.loaderMeta const config = JSON.stringify(options.config) const blended = options.blended const newBlended = options.newBlended const pxTransformConfig = options.pxTransformConfig const { globalObject } = this._compilation?.outputOptions || { globalObject: 'wx' } const entryCacheLoader = path.join(__dirname, 'entry-cache.js') + '?name=app' entryCache.set('app', { source, map }) const prerender = ` if (typeof PRERENDER !== 'undefined') { ${globalObject}._prerender = inst }` const runtimePath = Array.isArray(options.runtimePath) ? options.runtimePath : [options.runtimePath] let setReconcilerPost = '' const setReconciler = runtimePath.reduce((res, item) => { if (REG_POST.test(item)) { setReconcilerPost += `import '${item.replace(REG_POST, '')}'\n` return res } else { return res + `import '${item}'\n` } }, '') const createApp = `${creator}(component, ${frameworkArgs})` let instantiateApp = blended || newBlended ? ` var app = ${createApp} app.onLaunch() exports.taroApp = app ` : `var inst = App(${createApp})` if (typeof modifyInstantiate === 'function') { instantiateApp = modifyInstantiate(instantiateApp, 'app') } return `${setReconciler} import { window } from '@tarojs/runtime' import { ${creator} } from '${creatorLocation}' import { initPxTransform } from '@tarojs/taro' ${setReconcilerPost} import component from ${stringify(['!', entryCacheLoader, this.resourcePath].join('!'))} ${importFrameworkStatement} var config = ${config}; window.__taroAppConfig = config ${instantiateApp} ${options.prerender ? prerender : ''} initPxTransform({ designWidth: ${pxTransformConfig.designWidth}, deviceRatio: ${JSON.stringify(pxTransformConfig.deviceRatio)}, baseFontSize: ${pxTransformConfig.baseFontSize || 20}, unitPrecision: ${pxTransformConfig.unitPrecision}, targetUnit: ${JSON.stringify(pxTransformConfig.targetUnit)} }) ` }