我用命令mojo generate app first-app
生成了一个有趣的应用程序。它生成的应用程序结构在使用morbo ./script/first-app
运行开发服务器时应允许运行示例。
文件结构如下所示: 魔术应用结构
在项目目录的根目录中运行morbo ./script/first-app
时,我的错误是此错误:
Can't load application from file "/home/djnorrisdev/Documents/mojo-practice/first-app/script/first-app":
Can't find application class "first-app" in @INC. (
/home/djnorrisdev/Documents/mojo-practice/first-app/lib
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0/x86_64-linux
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/site_perl/5.30.0
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0/x86_64-linux
/home/djnorrisdev/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0)
Compilation failed in require at (eval 72) line 1
(为便于阅读,添加了换行符。缩进线是前一行的延续。
我尝试使用 morbo 的完整路径(如 6 年前的 SO 帖子中所述(,但这给出了与上述相同的错误。那个命令是这样的:/home/djnorrisdev/perl5/perlbrew/pls/perl-5.30.0/bin/morbo ./script/first-app
我猜任何熟悉完整 mojolicious 应用程序的人都会熟悉脚本文件,但这是script/first-app
的内容:
#!/usr/bin/env perl
use strict;
use warnings;
use Mojo::File 'curfile';
use lib curfile->dirname->sibling('lib')->to_string;
use Mojolicious::Commands;
# Start command line interface for application
Mojolicious::Commands->start_app('first-app');
考虑到这是一个繁琐的应用程序,我认为它不应该出现@INC错误并使用 morbo 运行而不会出现问题。有人对此有深刻的见解吗?
为了使您的设置正常工作,first-app.pm
必须包含package first-app;
,但由于破折号,这不是合法代码。Håkon Hægland建议mojo generate app first-app
不应该工作(大概是为了避免这个问题(,所以不清楚你是如何得到你所描述的设置的。
要解决此问题,您可以使用更合适的名称(例如FirstApp
(重新运行mojo generate app
并重新开始。
或者,理论上您应该能够通过以下三个更改来解决问题:
- 将
lib/first-app.pm
重命名为更传统的名称,例如lib/FirstApp.pm
。 - 将传递给
->start_app
的参数更改为'FirstApp'
。 - 将现在命名的
lib/FirstApp.pm
中的package
指令更改为package FirstApp;
。
模块的路径、模块的package
指令和用于加载模块的use
语句(在本例中传递给->start_app
的值(必须全部匹配。这三个更改确保了相关模块的这一点。
[注意:我没有使用Mojo的经验。