首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么本机节点模块总是在npm安装上重新编译?

为什么本机节点模块总是在npm安装上重新编译?
EN

Stack Overflow用户
提问于 2022-04-25 13:15:03
回答 1查看 622关注 0票数 0

我正在用电子14节点v14.17.7构建一个应用程序,分别是NPM6.14.15来构建我的本地节点模块。

每次执行npm install时,我的所有本机依赖项都是从源重新构建的(因为电子版本和节点版本的组合不能作为回购中预先构建的版本使用)。

下面是从日志中进行的一个尝试:

代码语言:javascript
复制
• electron-builder  version=22.14.13
  • loaded configuration  file=package.json ("build" field)
  • rebuilding native dependencies  dependencies=drive-name@1.0.3 platform=darwin arch=x64
  • install prebuilt binary  name=foo version=9.2.4 platform=darwin arch=x64 napi=
  • build native dependency from sources  name=foo
                                          version=9.2.4
                                          platform=darwin
                                          arch=x64
                                          napi=
                                          reason=prebuild-install failed with error
                                          (run with env DEBUG=electron-builder to get more information)
    prebuild-install WARN install prebuilt binaries enforced with --force!
    prebuild-install WARN install prebuilt binaries may be out of date!

以下信息非常突出:

代码语言:javascript
复制
WARN install prebuilt binaries enforced with --force!

这条线是打印的这里

代码语言:javascript
复制
if (opts.force) {
  log.warn('install', 'prebuilt binaries enforced with --force!')
  log.warn('install', 'prebuilt binaries may be out of date!')

不幸的是,我不知道或不知道force在哪里被设置为真。有人能帮忙吗?

build字段的package.json是:

代码语言:javascript
复制
"build": {
    "appId": "com.foo.foo",
    "productName": "foo",
    "buildVersion": "1.0.0",
    "publish": {
      "provider": "s3",
      "bucket": "foo",
      "region": "foo",
      "endpoint": "https://foo.s3.amazonaws.com"
    },
    "afterPack": "./scripts/afterPack.js",
    "afterSign": "./scripts/notarization.js",
    "afterAllArtifactBuild": "./scripts/notarization_dmg.js",
    "files": [
      "dist/**/*",
      "main.js",
    ],
    "extraResources": [
      "./extra/**"
    ],
    "dmg": {
      "sign": true
    },
    "mac": {
      "binaries": [
        "./python34/bin/python3.4",
      ],
      "target": [
        "zip",
        "dmg"
      ],
      "hardenedRuntime": true,
      "entitlements": "./scripts/entitlements.mac.plist",
      "icon": "./public/icons/mac/icon.icns"
    },
    "directories": {
      "output": "foo-release",
      "buildResources": "public"
    }
EN

回答 1

Stack Overflow用户

发布于 2022-05-09 02:38:51

在运行npm之前设置DEBUG=electron-builder以获取更多信息。

还请考虑预构建-安装的这份说明。

与预构建与预构建安装相匹配,我们建议将预构建与节点-gyp-构建结合起来。 使用prebuildify,所有预构建的二进制文件都会在发布到npm的包中提供,这意味着不需要像在预构建中那样单独的下载步骤。这种方法的讽刺之处在于,当每个平台被捆绑时,下载所有预构建的二进制文件要比下载一个预构建二进制文件作为安装脚本要快。 优点:

  1. 没有额外的下载步骤,使它更可靠和更快的安装。
  2. 支持在本地更改运行时版本,并在Node.js和电子之间使用相同的安装。重新安装或重建是不必要的,因为所有预先构建的二进制文件都在npm tarball中,而正确的二进制文件只是在运行时选择的。
  3. 节点-gyp-构建运行时依赖关系是无依赖的,而且原则上仍然如此,因为引入依赖关系将否定更短的安装时间。
  4. 即使禁用了npm安装脚本,预构建的二进制文件也能工作。5.国家预防机制一揽子检查和也涵盖预先构建的二进制文件。

编辑:尝试

  • 在build字段中设置"npmRebuild": "false", (通过)
  • 在节点_模块/ opts.force = false设置opts.force = false
  • npm install --verbose以获得更多的输出和
  • npm install --timing来保存调试日志,以便在调试日志过多时进行检查。
  • --inspect-brk$NODE之间添加一个npm副本.然后使用Chromium的devtools/您的IDE在浏览器中逐步完成热键F10和F11的安装过程。您可以预先设置断点,或者通过debugger;和run插入断点,直到在那里用热键F8加速这个进程。
  • 切换到预建
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72000180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档