在knex.js中创建迁移时出现错误。

3

我正在尝试创建一个迁移,但是它抛出以下错误

yarn run v1.6.0
(node:14212) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usabil
ity issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods in
stead.
$ babel-node node_modules/.bin/knex migrate:make create_linky_table
C:\Users\Sagar\Desktop\linky\api\node_modules\.bin\knex:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
          ^^^^^^^

SyntaxError: missing ) after argument list
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Object.runInThisContext (vm.js:303:10)
    at Module._compile (internal/modules/cjs/loader.js:656:28)
    at Module._extensions..js (internal/modules/cjs/loader.js:699:10)
    at Object.newLoader [as .js] (C:\Users\Sagar\Desktop\linky\lms-linky\api\node_modules\pi
rates\lib\index.js:88:7)
    at Module.load (internal/modules/cjs/loader.js:598:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
    at Function.Module._load (internal/modules/cjs/loader.js:529:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

我在package.json中的脚本中设置了以下内容:
"knex": "babel-node --require ./node_modules/dotenv/config node_modules/.bin/knex --knexfile='src/knexfile.js'",

我正在使用以下代码创建迁移:
yarn knex make:migration create_linky_table

目前我正在使用Windows系统,我看到了这个解答。这可能是Windows系统的问题吗?


你已经有这个问题的答案了吗? - Beginner
2个回答

5

@Mikael Lepistö 所说的是正确的。

我在Windows上编写迁移脚本时也遇到了类似的问题。

我的先前命令是:

babel-node node_modules/.bin/knex --knexfile src/database/knexfile.js migrate:latest

我将其更改为:
babel-node node_modules/knex/bin/cli.js --knexfile src/database/knexfile.js migrate:latest

错误已经消失。也许将引用从.bin/knex更改为/knex/bin/cli.js会为您带来魔力,所以试试看。


1
似乎在Windows中,C:\Users\Sagar\Desktop\linky\api\node_modules\.bin\knex 脚本不是JavaScript可执行文件,而是Windows中的shell脚本包装器。因此,当您尝试使用babel-nodenode来执行它时,节点解释器会失败,因为您正在尝试使用它运行 shell脚本。

检查一下C:\Users\Sagar\Desktop\linky\api\node_modules\.bin\knex脚本中存储了什么,如果有一种方法可以覆盖使用的node解释器,则可以使用babel-node进行覆盖。如果没有办法覆盖它,您可以检查它是否调用例如node_modules/knex/bin/cli.js并直接使用babel-node调用它。

我会自己检查这些内容,但我没有在此桌面上安装Windows node工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接