原生脚本使用 `tns-core-modules` 插件通过许多工具提供核心开发体验,包括 UI 元素、文件系统访问、连接性、平台和应用程序工具等等。此插件会自动添加到每个新创建的项目中,其模块可以通过 JavaScript 的 `require` 或 TypeScript 的 `import` 访问。
以下是在原生脚本应用程序中使用 `tns-core-modules` 的示例
// TypeScript imports (for TypeScript or Angular based projects)
import { EventData } from "tns-core-modules/data/observable";
import { Label } from "tns-core-modules/ui/label";
export function navigatingTo(args: EventData) {
const label = new Label();
}
// JavaScript require (for plain JavaScript projects)
const Label = require( "tns-core-modules/ui/label").Label;
exports.navigatingTo = function(args) {
const label = new Label();
}
原生脚本的最后几个版本带来了许多新功能,包括预览应用程序、扩展的 Webpack 支持、热模块替换、通过 CLI 进行云构建等等。 一些功能的复杂性和 Webpack 应该默认可用于所有原生脚本应用程序的概念要求团队弃用短导入!
问:等等!什么是 **短导入**?
答:从 `tns-core-modules/something` 简化为 `something` 的导入。
短导入示例
// deprеcated short import (TypeScript)
import { device } from "platform";
// deprеcated short import (JavaScript)
let device = require("platform").device;
上面的代码应该改写为
// TypeScript module import
import { device } from "tns-core-modules/platform";
// JavaScript module import
let device = require("tns-core-modules/platform").device;
从一开始,短导入就是原生脚本中的一个功能。其理念是简化开发者的体验。但是,短导入由于以下几个原因很不方便
技术债务 - 任何需要访问 `tns-core-modules` 的新功能都应该考虑路径是短路径还是完整路径,以及插件是外部插件还是嵌入式插件(例如 在预览应用程序中使用导入)。
可用性 - 原生脚本开发者在使用短导入时可能会感到困惑。在以下示例中,您可能认为我们正在从一个独立库中导入,但实际上,这是一个来自 `tns-core-modules` 插件的模块。
import * as http from "http"; // 实际上这是 `tns-core-modules/http` 的短导入
这些都是告别短导入的原因。在原生脚本 5.2 中,短导入现已弃用。
问:我需要采取任何措施吗?
答:**如果您是应用程序开发者,请确保将所有短导入迁移到完整导入。**如果您拥有原生脚本插件,您也需要将插件导入从短语法迁移到完整语法。
原生脚本团队已经将原生脚本组织下的插件迁移到使用完整导入。下一步是遍历社区插件,并通知插件作者关于此更改的必要性。