【问题标题】:Including an external javascript library in pebble js file?在 pebble js 文件中包含外部 javascript 库?
【发布时间】:2014-05-02 01:17:58
【问题描述】:

有什么方法可以在我的 pebble 代码中包含一个外部 JS 库? 通常在网页上,我会在我的头部标签中这样做:

<script type='text/javascript' src='https://cdn.firebase.com/js/client/1.0.11/firebase.js'></script>

但在 pebble 中,我无法做到这一点,因为我只使用 JS。那么如何为 JavaScript 文件包含一个外部库。

【问题讨论】:

    标签: javascript pebble-watch pebble-sdk cloudpebble


    【解决方案1】:

    目前不能包含外部 JS 文件。

    如果您使用的是 CloudPebble,那么执行此操作的唯一方法是将 JS 库文件的内容复制并粘贴到您的 JS 文件中。

    如果你在做原生开发,你可以修改 wscript 文件,在构建时将多个 JS 文件合并为一个。

    【讨论】:

      【解决方案2】:

      我认为 Pebble.js 与 PebbleKit JS (v3.8.1) 存在一些混淆。 Pebble.js 是一个新兴的 SDK,最终程序员将能够编写纯 JavaScript。它仍在烹饪中,因此缺少一些功能,例如绘制线条或获取屏幕尺寸的能力。该 repo 是 C 和 JS 源代码的混合,您可以在其中添加 C 代码以增加缺少的功能,否则您的所有代码都位于 src/js/app.jssrc/js/app/ 中。无论如何,Pebble.js 确实是 support require

      我不使用 CloudPebble,但我得到了 the impression,它要么支持 Pebble.js(因此支持 require)或计划支持。我认为所有这些 SDK 样板代码都会被隐藏。

      PebbleKit JS 不支持开箱即用的require AFAIK。我制作了一个demo,将require 支持从Pebble.js 移植到PKJS。变化总结如下:

      1. 将项目的 src/js/pebble-js-app.js 移动到 src/js/app/index.js
      2. src/js/app/index.js 中删除任何就绪事件侦听器。 index.js会 在发出 ready 事件时加载。
      3. 从 Pebble.js 添加 src/js/loader.js
      4. 添加一个在ready 事件上调用require('src/js/app')src/js/main.js
      5. 使用以下内容更新您的wscript deltas
      6. 添加新模块时,将它们放在src/js/app/ 下,require('./name') 将起作用。

      我已尝试在演示的readme 中涵盖这一切。

      顺便说一句,这里是official breakdown of all the different SDKs,但有点混乱。

      【讨论】:

        【解决方案3】:

        我不确定自上述答案以来是否发生了变化,但看起来实际上有一种方法可以在保持整洁的同时包含额外的资源。在pebbleJS page 上,有以下部分包含有关该主题的一些信息。


        全局命名空间 - 需要(路径)

        加载另一个 JavaScript 文件,允许您编写多文件项目。包加载松散地遵循 CommonJS 格式。 path 是依赖的路径。


        然后您可以使用以下代码在您的 pebble 项目中“要求”一个 JS 库。这应该可以在 Cloud Pebble 和原生开发中使用。

        // src/js/dependency.js
        var dep = require('dependency');
        

        然后您可以如下所示使用它:

        dep.myFunction(); // run a function from the dependency
        dep.myVar = 2; // access or change variables
        

        更新: 在为我自己进行了一些研究之后,我已经成功地让 CloudPebble 使用这个功能。它有点复杂,但遵循 ECMAScript 6 标准。下面我发布了一个简单的例子来进行设置。此外,我建议查看 this code from PebbleJS 以获得对复杂设置的更好参考。

        myApp.js

        var resource = require('myExtraFile');        // require additional library
        
        console.log(resource.value);                  // logs 42
        
        resource.functionA();                         // logs "This is working now"
        

        myExtraFile.js

        var myExtraFile = {                           // create a JSON object to export
        
          "value" : 42,                               // variable
        
          functionA : function() {                    // function
            console.log("This is working now!");
          }
        };
        
        this.exports = myExtraFile;                   // export this function for
                                                      // later use
        

        【讨论】:

        • ...但不幸的是,这不适用于 PebbleKit.JS 应用程序:[INFO] MyApp__1001.0/pebble-js-app.js:1 Uncaught ReferenceError: require is not defined
        • 自六月以来没有尝试过。他们一定改变了一些事情。我可以检查一下,因为我最近有一些时间,想重新开始 Pebble 开发。
        • 查看当前的云 pebble 文档,看起来事情并没有太大变化。我的代码应该非常正确。如果您进行本地开发而不是云鹅卵石,我不确定情况是否有所不同...
        • 刚刚再次测试。我在 Android 上,Pebble 应用程序 v2.3.1。所有 js 文件都包含在 bundle 中,但仅使用 pebble-js-app.js。而require 不起作用:[INFO ] test__1.0/pebble-js-app.js:1 Uncaught ReferenceError: require is not defined/data/data/com.getpebble.android/app_jskit_installed_apps/APPNAME/ 中也没有安装其他 JS 文件,只有主 js 文件。也许它在 iOS 实现下的工作方式不同?
        猜你喜欢
        • 1970-01-01
        • 2012-03-28
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        • 2017-10-25
        • 2020-03-19
        • 2017-09-10
        相关资源
        最近更新 更多