【问题标题】:"Legacy octal literals are not allowed in strict mode." error happens at ./node_modules /tar/tar.js:108:10“严格模式下不允许使用传统八进制文字。”错误发生在 ./node_modules /tar/tar.js:108:10
【发布时间】:2021-08-29 00:45:12
【问题描述】:

我在带有电子和打字稿的环境中使用 sqlite3,但是当我尝试使用它时,我得到了标题所说的错误(当电子开始运行时)。请让我知道该怎么做...

错误如下。

error - ../node_modules/tar/tar.js:108:10
Syntax error: Legacy octal literals are not allowed in strict mode.

  106 | // values for the mode field
  107 | var modes =
> 108 |   { suid: 04000 // set uid on extraction
      |           ^
  109 |   , sgid: 02000 // set gid on extraction
  110 |   , svtx: 01000 // set restricted deletion flag on dirs on extraction
  111 |   , uread:  0400

我的环境如下。

os: Windows10

---------cmd------------
node -v
> v14.2.0

npx electron -v
> v12.0.11

-------package.json-------
"scripts": {
  ...
  "postinstall": "npm run rebuild && electron-builder install-app-deps",
  "rebuild": "electron-rebuild -f -w sqlite3",
},
"dependencies": {
  ...
  "sqlite3":"^5.0.2",
},
"devDependencies": {
  ...
  "electron": "12.0.2",   (different version to ↑...?)
  "typescript": "^4.2.3"
}

如果我只能在 tar.js 中执行诸如忽略严格模式之类的操作,那会是一种解决方法吗...?还是我需要做一些不同的事情?

--

[编辑] 作为测试,我尝试使用“npm i tar”直接安装tar,虽然最初并没有直接安装。然后我得到了一个不同的错误。看来 node-gyp 和 node-pre-gyp 出了问题。 也许,问题不在于“tar”版本,而在于电子、windows 和 sqlite3 之间的依赖关系。但我不知道如何使这种依赖关系正确......这将是另一个问题......无论如何,谢谢,

【问题讨论】:

  • 安装了哪个版本的tar 库?你可以在package-lock.json文件中查看
  • package-lock.json 中的“tar”版本是“2.2.2”。我看了看,发现它是“node-pre-gyp”和“node-gyp”所需要的,而不是“sqlite3”。

标签: javascript typescript electron


【解决方案1】:

不清楚要定义八进制数还是十进制数?

  1. 如果 04000 应该是八进制数,请使用 0o 前缀:
const x = 0o4000;
console.log(x); // 2028 in decimal
  1. 如果 040000 应该是十进制数,请使用 4000

【讨论】:

  • 我不想定义八进制或十进制数。错误发生在我不写的 node_modules 中。我认为sqlite3使用了tar.js,我不知道如何解决这个错误。
  • 好吧,可以通过修复与 JavaScript strict mode 不兼容的 tar.js 或在构建环境中禁用 strict mode 来解决此问题。
  • 如果 tar 是一个 npm 模块,你也可以尝试升级到新版本。
猜你喜欢
  • 2016-08-21
  • 2021-03-31
  • 2021-08-18
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多