在knex.js中创建迁移会引发错误

时间:2018-12-15 15:28:39

标签: node.js knex.js

我正在尝试创建迁移,它引发以下错误

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,并且遇到this answer。可能是Windows问题吗?

2 个答案:

答案 0 :(得分:2)

@MikaelLepistö说的是正确的。

在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 :(得分:0)

Windows中的C:\Users\Sagar\Desktop\linky\api\node_modules\.bin\knex脚本之类的声音不是JavaScript可执行文件,实际上是Windows中的Shell脚本包装器。因此,当您尝试使用babel-nodenode来执行它时,节点解释器会失败,因为您试图使用它运行bash/sh shell脚本。

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

我会亲自检查一下,但是此台式机上没有Windows节点工具设置。