我正在尝试使用这样的快照标记捆绑NativeScript应用程序:
tns build android --bundle --env.snapshot
出现以下错误:
ERROR in NativeScriptSnapshot. Snapshot generation failed!
Target architecture: x86
# Script run failed in <embedded>@736:2461
ReferenceError: com is not defined
#
# Fatal error in ../src/snapshot/mksnapshot.cc, line 175
# Check failed: blob.data.
#
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
问题是根文件夹中的app.scss
已重命名为其他内容。确保它将通过/^\.\/app\.(css|scss|less|sass)$/
文件中的正则表达式(默认值:vendor.ts
)。
答案 1 :(得分:0)
请参阅How it works部分
快照包中包含的模块仍然可以包含本机模块 API调用,因为它们不会立即评估模块 加载。例如,以下模块:
需要( “应用”);
var time = new android.text.format.Time();无法快照 因为它触及android.text.format。时间API不是 可用即可。但是,在这一个:
需要( “应用”);
function getTime(){ return new android.text.format.Time();在模块执行时不评估本机API访问。鉴于getTime()被调用 稍后在Android提供的功能齐全的V8上下文中 运行时,我们可以安全地将模块包含在快照包中。
如果快照步骤由于对未定义的引用而失败 API,尝试以下一些解决方案:
如果您可以更改包含禁用API调用的模块,请换行 应用程序运行时调用的函数中的有罪代码 在设备上保持模块在捆绑中,但要确保所有需要 应用程序执行后,将执行不可快照模块的调用 在设备上运行:require(“application”); var m = 要求( “非snapshotable模块”);
function doSomething(){ return m.someMethod();如果上面的代码在何时加载不可快照模块,则上面的代码有更高的成功快照的机会 它确实需要它:
需要( “应用”);
function doSomething(){ return require(“non-snapshotable-module”)。someMethod();如果从未在快照上下文中调用doSomething()函数,则 不会评估不可快照的模块,并且将生成blob 成功。
从中排除包含禁止API调用的模块 快照包。
因此,请确保您没有在快照时间引用com
。