【问题标题】:NativeScript, Code Sharing and different environmentsNativeScript、代码共享和不同的环境
【发布时间】:2018-10-18 15:07:26
【问题描述】:

注意:这不是thisthis 其他问题的欺骗。继续阅读:这个问题特定于代码共享模板。


我正在使用 NativeScript、Angular 和代码共享模板(请参阅:@nativescript/schematics)进行一些非常基本的实验。

现在我正在对框架如何支持不同的“构建配置”进行一些探索/ poc 工作。需要明确的是,我正在寻找一种简单的(希望是官方的)方法,让应用程序根据当前平台(web/ios/android)和环境使用不同版本的特定文件(我们称之为 configuration.ts) (开发/生产/登台?)。

做第一部分显然是微不足道的——毕竟这是代码共享原理图的主要目的。因此,同一文件的不同版本由不同的扩展名标识。 This page explain things pretty simply.

如果框架/模板支持任何可用于在文件的调试/发布(甚至更好的开发/暂存/生产)版本之间切换的类似的基于约定的规则,我并不容易得到。以 config.ts 文件为例,该文件包含基于环境的不同参数。

我已经对该主题进行了一些研究,但我无法找到结论性的答案:

  • the old and now retired documentation for the appbuilder platform 提到了文件的(.debug..release.)命名约定。我不认为这项工作了。
  • 其他消息来源提到在调用 tns build / tns run 期间传递参数,然后通过 webpack env 变量获取它们...See here。这可能有效,但看起来有点奇怪
  • 提到的第三个选项是使用挂钩来自定义构建 (or use a plugin that should do the same)
  • 最后,出于某种奇怪的原因,@nativescript/schematics 似乎生成了一个默认项目,其中包含两个名为environment.tsenvironment.prod.ts 的文件。我怀疑那些只适用于项目的网络版本(阅读:ng serve) - 我无法让移动编译器识别以 debug.ts、prod.ts 或 release.ts 结尾的文件

虽然我试图做的事情可能不仅仅得到支持(还没有?),但普遍的困惑和对此事的不同意见让我觉得我可能在某个地方遗漏了一些东西。

如果这个 IS 以某种方式受到支持,我还想知道它如何与 NativeScript Sidekick 应用程序集成,该应用程序通常被建议作为一种工具来简化 NativeScript 应用程序的构建/运行过程(没有为 Sidekick 自动化的 tns 命令指定附加参数的方法,唯一可用的选项是在调试/发布模式之间切换),但这可能最好留给另一个问题。

【问题讨论】:

    标签: configuration nativescript angular2-nativescript nativescript-codesharing


    【解决方案1】:

    尚不支持环境文件,从构建命令传递环境变量可能是目前可行的解决方案。

    当然,如果您希望立即支持环境文件,您可以编写自己的原理图。

    【讨论】:

    • 感谢您的建议,但问题仍然存在 - 为什么原理图会创建 environment.ts 和 environment.prod.ts?
    • 我认为它适用于网络应用程序。 Schematics 仍处于早期阶段,您可以在 repo 中将其作为功能请求提出。
    【解决方案2】:

    我还没有考虑在 web 和移动设备之间共享环境文件 - 我确实喜欢 Manoj 关于修改原理图的建议,但我想当我到达那里时我必须越过那座桥。我可能会回答您关于 Sidekick 的第二个问题。最新版本确实支持“Webpack”构建选项,该选项似乎将 --bundle 参数传递给 tns。需要注意的是,这个选项似乎对打字稿错误更敏感,即使是相对良性的错误,所以你必须小心并确保在构建之前修复它们。就我而言,我必须将 package.json 中的 @types/jasmine 版本锁定为“2.8.6”,以避免它与 Sidekick 的云解决方案正在使用的 typescript 版本之间存在一些不兼容。另一个提示是在进行 npm 依赖项更改后检查“Clean Build”。祝你好运!

    【讨论】:

    • 是的,我知道 Webpack 选项。问题是我认为该设置不能用于在不同的“环境”之间切换。将不得不检查,我认为Nativescript的最后一个版本可能在这方面有一些改进
    • 对不起,如果我说的是显而易见的,但只是为了澄清 - 如果您有一个共享的 Web/移动项目,则需要 Webpack 构建设置,因为它在 webpack 捆绑过程中具有 nativescript 特定文件.tns。在他们的名字中被正确捆绑,以取代他们的特定网络对应物。您是否尝试创建 environment.tns.ts 和 environment.prod.tns.ts?我敢打赌,webpack 捆绑过程将在原生构建期间正确使用它们。如果这可行并且您需要经常这样做,您可以更改原理图以自动为您生成这些文件
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多