是否可以为Laravel创建自定义npm运行命令?

时间:2018-09-27 10:20:26

标签: php laravel csv command npm-run

Laravel具有以下内置npm run命令(以及其他命令):

npm run install
npm run watch

是否可以创建自定义npm run命令来运行自定义PHP脚本?例如,我想创建一个名为npm run csv的命令,该命令将运行一个PHP脚本,该脚本将一堆CSV数据导入数据库。

谢谢。


编辑:问了一个问题并看到了很多答复后,很明显,编写php artisan命令可能是更好的方法。因此,这就是我要做的。

谢谢大家的回应。至于为什么我不问这个问题,这很简单:我不知道那是一个更好的方法。我还是Laravel和学习的新手。谢谢。

4 个答案:

答案 0 :(得分:2)

首先,您必须写Artisan Console Command。然后,您可以使用npm运行它。但这不是推荐的方法。您可以运行任何工匠命令,例如:

php artisan inspire

如果要使用npm运行此命令,只需在package.json的脚本中添加此命令。例如:

{
   "scripts": {
       "inspire": "php artisan inspire"
   }
}

然后运行如下命令:

npm run inspire

答案 1 :(得分:2)

创建自己的工匠命令应该更简洁。

请参见https://laravel.com/docs/5.7/artisan#writing-commands

然后将您的csv导入代码放入handle()方法中。

您只需运行:php artisan import-csv或类似的

答案 2 :(得分:1)

无需使用NPM调用PHP!为什么不创建自己的可执行文件呢?

使用Laravel,有一个命令系统,因此您可以制作自己的artisan命令。但是,如果您想要更简单的方法,可以这样做:

示例。我在项目中创建了一个名为bin/do_stuff

的文件
#!/usr/bin/env php
<?php
      echo "Easy as that!\n";

然后使其可执行:

chmod +x bin/do_stuff

然后您可以使用./bin/do_stuff运行它!一点也不难!现在,您还可以像这样传递参数:

./bin/do_stuff--option1=value1 --option2

有或没有值。为此,我们添加以下内容:

foreach ($argv as $arg)
{
    preg_match('/\-\-(\w*)\=?(.+)?/', $arg, $value);
    if ($value && isset($value[1]) && $value[1])
    {
       $options[$value[1]] = isset($value[2]) ? $value[2] : null;
    }
}

非常适合于cron工作和后端工作。试试看!

答案 3 :(得分:1)

我喜欢Laravel的这一面。从您要实现的目标出发,我是否可以建议定制手工艺命令? :)

https://laravel.com/docs/5.7/artisan

推荐阅读,这对您正在寻找的东西非常有用:D