为啥 Cordova 项目具有相同的 index.js 副本?

Posted

技术标签:

【中文标题】为啥 Cordova 项目具有相同的 index.js 副本?【英文标题】:Why does a Cordova project have identical copies of index.js?为什么 Cordova 项目具有相同的 index.js 副本? 【发布时间】:2020-07-18 20:17:56 【问题描述】:

我提供了很多背景信息来帮助您回答这个问题,但是您可以跳到名为“问题”的标题以跳到重点。

背景

我不熟悉使用 Cordova,并且不熟悉想要进一步开发的现有 Cordova 项目。结果,当我查看项目文件时,我不确定以前的开发人员做出了哪些选择,以及 Cordova 自动做出了哪些选择。我怀疑 Cordova 会生成很多不是由应用程序开发人员创建的文件,因为在我的例子中,有超过 7900 个文件,包括源代码和自述文件,并且该应用程序以前(至少据我所知)仅由一个人开发。

虽然可以从这个角度提出很多问题,但我想缩小一个具体问题的范围,以免过于宽泛。我注意到路径结构中有许多文件称为index.js

$ find . -name "index.js"
./platforms/android/app/build/intermediates/assets/debug/www/js/index.js
./platforms/android/app/src/main/assets/www/js/index.js
./platforms/android/cordova/node_modules/balanced-match/index.js
./platforms/android/cordova/node_modules/os-tmpdir/index.js
./platforms/android/cordova/node_modules/concat-map/index.js
./platforms/android/cordova/node_modules/properties-parser/index.js
./platforms/android/cordova/node_modules/elementtree/lib/parsers/index.js
./platforms/android/cordova/node_modules/os-homedir/index.js
./platforms/android/cordova/node_modules/xmlbuilder/lib/index.js
./platforms/android/cordova/node_modules/ansi/examples/beep/index.js
./platforms/android/cordova/node_modules/ansi/examples/progress/index.js
./platforms/android/cordova/node_modules/ansi/examples/clear/index.js
./platforms/android/cordova/node_modules/path-is-absolute/index.js
./platforms/android/cordova/node_modules/brace-expansion/index.js
./platforms/android/cordova/node_modules/sax/test/index.js
./platforms/android/cordova/node_modules/android-versions/index.js
./platforms/android/cordova/node_modules/lodash/index.js
./platforms/android/cordova/node_modules/cordova-registry-mapper/index.js
./www/js/index.js
./node_modules/objectorarray/index.js
./node_modules/es-abstract/index.js
./node_modules/es-abstract/test/index.js
./node_modules/isexe/index.js
./node_modules/balanced-match/index.js
./node_modules/object-keys/index.js
./node_modules/object-keys/test/index.js
./node_modules/has/src/index.js
./node_modules/has/test/index.js
./node_modules/semver/test/index.js
./node_modules/string.prototype.trim/index.js
./node_modules/string.prototype.trim/test/index.js
./node_modules/cordova-plugin-file/src/blackberry10/index.js
./node_modules/jsonfile/index.js
./node_modules/fs-extra/lib/ensure/index.js
./node_modules/fs-extra/lib/remove/index.js
./node_modules/fs-extra/lib/move/index.js
./node_modules/fs-extra/lib/output/index.js
./node_modules/fs-extra/lib/copy-sync/index.js
./node_modules/fs-extra/lib/fs/index.js
./node_modules/fs-extra/lib/empty/index.js
./node_modules/fs-extra/lib/index.js
./node_modules/fs-extra/lib/path-exists/index.js
./node_modules/fs-extra/lib/copy/index.js
./node_modules/fs-extra/lib/move-sync/index.js
./node_modules/fs-extra/lib/json/index.js
./node_modules/fs-extra/lib/mkdirs/index.js
./node_modules/concat-map/index.js
./node_modules/elementtree/lib/parsers/index.js
./node_modules/fs.realpath/index.js
./node_modules/plist/index.js
./node_modules/path-key/index.js
./node_modules/xmlbuilder/lib/index.js
./node_modules/ansi/examples/beep/index.js
./node_modules/ansi/examples/progress/index.js
./node_modules/ansi/examples/clear/index.js
./node_modules/cordova-android/node_modules/balanced-match/index.js
./node_modules/cordova-android/node_modules/os-tmpdir/index.js
./node_modules/cordova-android/node_modules/concat-map/index.js
./node_modules/cordova-android/node_modules/properties-parser/index.js
./node_modules/cordova-android/node_modules/elementtree/lib/parsers/index.js
./node_modules/cordova-android/node_modules/os-homedir/index.js
./node_modules/cordova-android/node_modules/xmlbuilder/lib/index.js
./node_modules/cordova-android/node_modules/ansi/examples/beep/index.js
./node_modules/cordova-android/node_modules/ansi/examples/progress/index.js
./node_modules/cordova-android/node_modules/ansi/examples/clear/index.js
./node_modules/cordova-android/node_modules/path-is-absolute/index.js
./node_modules/cordova-android/node_modules/brace-expansion/index.js
./node_modules/cordova-android/node_modules/sax/test/index.js
./node_modules/cordova-android/node_modules/android-versions/index.js
./node_modules/cordova-android/node_modules/lodash/index.js
./node_modules/cordova-android/node_modules/cordova-registry-mapper/index.js
./node_modules/cordova-android/bin/templates/project/assets/www/js/index.js
./node_modules/for-each/index.js
./node_modules/tape/index.js
./node_modules/path-is-absolute/index.js
./node_modules/brace-expansion/index.js
./node_modules/deep-equal/index.js
./node_modules/has-symbols/index.js
./node_modules/has-symbols/test/index.js
./node_modules/shebang-regex/index.js
./node_modules/is-callable/index.js
./node_modules/through/index.js
./node_modules/through/test/index.js
./node_modules/resumer/index.js
./node_modules/resolve/index.js
./node_modules/resolve/test/resolver/dot_main/index.js
./node_modules/resolve/test/resolver/multirepo/packages/package-b/index.js
./node_modules/resolve/test/resolver/multirepo/packages/package-a/index.js
./node_modules/resolve/test/resolver/quux/foo/index.js
./node_modules/resolve/test/resolver/incorrect_main/index.js
./node_modules/resolve/test/resolver/same_names/foo/index.js
./node_modules/resolve/test/resolver/dot_slash_main/index.js
./node_modules/resolve/test/shadowed_core/node_modules/util/index.js
./node_modules/resolve/test/node_path/x/ccc/index.js
./node_modules/resolve/test/node_path/x/aaa/index.js
./node_modules/resolve/test/node_path/y/ccc/index.js
./node_modules/resolve/test/node_path/y/bbb/index.js
./node_modules/resolve/test/module_dir/ymodules/aaa/index.js
./node_modules/resolve/test/module_dir/xmodules/aaa/index.js
./node_modules/resolve/test/precedence/aaa/index.js
./node_modules/resolve/test/dotdot/abc/index.js
./node_modules/resolve/test/dotdot/index.js
./node_modules/function-bind/index.js
./node_modules/function-bind/test/index.js
./node_modules/shebang-command/index.js
./node_modules/minimist/index.js
./node_modules/cordova-plugin-network-information/src/blackberry10/index.js
./node_modules/cross-spawn/index.js
./node_modules/es-to-primitive/index.js
./node_modules/es-to-primitive/test/index.js
./node_modules/strip-bom/index.js
./node_modules/is-date-object/index.js
./node_modules/path-parse/index.js
./node_modules/is-symbol/index.js
./node_modules/is-symbol/test/index.js
./node_modules/base64-js/index.js
./node_modules/node-version-compare/index.js
./node_modules/node-version-compare/test/index.js
./node_modules/universalify/index.js
./node_modules/define-properties/index.js
./node_modules/define-properties/test/index.js
./node_modules/nice-try/src/index.js
./node_modules/defined/index.js
./node_modules/object-inspect/index.js
./node_modules/is-regex/index.js
./plugins/cordova-plugin-file/src/blackberry10/index.js
./plugins/cordova-plugin-network-information/src/blackberry10/index.js

质疑这些同名文件中的每一个文件的用途是非常广泛和不切实际的,如果它们的存在取决于该项目先前开发人员的设计选择,则有些可能无法回答。幸运的是,我可以比这更具体。我有一个问题要调试,并且使用与该错误相关的特定搜索字符串,我能够找到名为 index.js 的特定文件包含该字符串。

$ grep -ril "<search_string>" .
./platforms/android/app/build/intermediates/assets/debug/www/js/index.js
./platforms/android/app/src/main/assets/www/js/index.js
./www/js/index.js

进一步澄清,虽然不是grep 返回的唯一文件,但这三个index.js 文件是唯一似乎与我的错误相关的文件。然后我使用cmp 比较这三个文件,我发现它们是相互相同的(由于cmp 默认情况下仅在存在存在 差异时才打印输出)。

some confusion 似乎是关于 ./www/js/index.js 的重要性,但似乎我更喜欢编辑 ./www/js/index.js 而不是 ./platforms/android/app/src/main/assets/www/js/index.js 因为 ./platforms/android/app/src/main/assets/www/js/index.js 是由 Cordova 根据自动生成的到this post。这表明./www/js/index.js 不是自动生成的,尽管./platforms/android/app/build/intermediates/assets/debug/www/js/index.js 是否自动生成仍然悬而未决。鉴于build./platforms/android/app/build/intermediates/assets/debug/www/js/index.js的路径中,我怀疑这是运行cordova build android命令时自动生成的文件。这让我怀疑我应该编辑 ./www/js/index.js 而不是这三个文件中的其他两个。

问题

我真的在一篇文章中问了 3 个问题,但是由于它们的范围和背景几乎相同,我更愿意将它们放在一起以作为上下文。

    在使用 Cordova 开发应用程序时,应该编辑三个 index.js 中的哪一个?
    ./platforms/android/app/build/intermediates/assets/debug/www/js/index.js
    ./platforms/android/app/src/main/assets/www/js/index.js
    ./www/js/index.js
    

    问题1中提到的三个index.js文件是相同的。为什么每个相同的副本都存在?

    在 Cordova 项目中有名为 index.js 的不相同文件。如果内容不同,为什么都叫同名?

【问题讨论】:

【参考方案1】:

您应该编辑/www/js/index.js

另外两个文件是在构建过程中创建的。构建的 Cordova 应用程序将所有 www 文件夹内容包含在一个 android 应用程序结构中,这就是它们位于 /platforms/android/app/src/main/ 中的原因

其他 index.js 文件在那里,因为它是 Node.js 模式

【讨论】:

我接受了这个答案,因为它回答了我的问题,我赞成它,因为它清晰简洁。

以上是关于为啥 Cordova 项目具有相同的 index.js 副本?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 AngularJS 视图无法在 Cordova 中加载?

为啥“cordova build ios”不更新 Xcode 项目?

Cordova iOS Javascript 不工作

为啥 angular/cordova 应用程序突然重新加载?

反应警告:flattenChildren(...):遇到两个具有相同键的孩子,`.$index`

安装插件后恢复cordova项目html文件