'lessc' 不是内部或外部命令,Yii2 WAMP win8
'lessc' is not recognized as an internal or external command, Yii2 WAMP win8
所以我通常在外部服务器上工作,但决定在我的 windows 8.1 计算机上以 WAMPserver 的形式设置本地环境。
从 (git bash) 控制台,我可以 运行 lessc 没有问题,但是当我安装 Yii2 并尝试处理 .less 时,它说它不能找到命令。
AssetConverter command 'lessc "C:/wamp/www/basic/web/css/site.less" "C:/wamp/www/basic/web/css/site.css" --no-color --source-map' failed with exit code 1:
STDOUT:
STDERR:
'lessc' is not recognized as an internal or external command,
operable program or batch file.
据我所知,这应该可行。事实上,当我 运行 来自控制台的相同命令时,它工作得很好。我在这里错过了一步吗?任何帮助将不胜感激。
最终通过更改命令以直接引用 lessc.cmd 来修复它
'assetManager'=>[
'converter' => [
'class' => 'yii\web\AssetConverter',
'commands' => [
'less' => ['css', 'c:\path\to\lessc.cmd {from} {to} --no-color'],
],
],
],
对这个修复不太满意,因为这意味着我在去 'live' 时需要更改我的设置,但没有其他任何效果。我尝试将它符号链接到 yii 目录、命令目录等。但是没有用。
我刚刚修好了。
你应该怎么做?
- 确保你可以 运行 cmd 中的 lessc windows.If 你不能,用 node.js 安装它 Install lessc with node.js
- 确保系统path.Mine中的lessc路径是
C:\Users\l7861\AppData\Roaming\npm
或者你可以在cmd中键入where lessc
windows来找到它。
- 确保你可以在
path_info()
中看到 lessc 路径。如果你不能重新启动你的 apache 服务器。
- 终于不用在config中添加addassetManager了~~~~~
下面是一个发现过程。
我只是认为这是 first.So 上 yii2 的一个错误 我用 Phpstrom.And 调试它 我看到了这一行:path\to\vendor\yiisoft\yii2\web\AssetConverter.php 91
$command = Yii::getAlias($command);
$command = strtr($command, [
'{from}' => escapeshellarg("$basePath/$asset"),
'{to}' => escapeshellarg("$basePath/$result"),
]);
$descriptor = [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$proc = proc_open($command, $descriptor, $pipes, $basePath);
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
foreach ($pipes as $pipe) {
fclose($pipe);
}
$status = proc_close($proc);
if ($status === 0) {
Yii::trace("Converted $asset into $result:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
} elseif (YII_DEBUG) {
throw new Exception("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr");
} else {
Yii::error("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
}
return $status === 0
}
只有当 $status 不为 0 时,才会收到错误消息。
这通常意味着 $command 有问题。
当我运行这里时,我可以看到它是'lessc "path/to/frontend/web/less/main.less" "path/to/frontend/web/less/main.css" --no-color';
而我运行它在cmd.Thencss文件是由它创建的
我在下面写了一个类似的代码,就像那个函数
$command='lessc "path/to/frontend/web/less/main.less" "path/to/frontend/web/less/main.css" --no-color';
$basePath="path/to/frontend/web";
$descriptor = [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$process = proc_open($command, $descriptor, $pipes /* $cwd, $env */ );
print_r($pipes);
$stdout = stream_get_contents($pipes[1]);
echo mb_convert_encoding($stdout, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );
$stderr = stream_get_contents($pipes[2]);
echo mb_convert_encoding($stderr, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );
if (is_resource($process)) {
fwrite($pipes[1], '<?php print_r($_ENV); ?>');
fclose($pipes[1]);
echo stream_get_contents($pipes[2]);
fclose($pipes[2]);
$return_value = proc_close($process);
echo "command returned $return_value\n";
}
和运行它在browser.Then我得到一个错误“lessc不被识别为内部或外部命令”。
所以我更改了配置文件 config/main.php,
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'assetManager' => [
'converter' => [
'class' => 'yii\web\AssetConverter',
'commands' => [
'less' => ['css', 'lessc {from} {to} --no-color'],
],
],
],
],
'name' => 'FavorTGD',
];
我得到了一个相同的 message.So 我查看了 php_info()
,path.there 中没有 lessc 程序 there.That 你只需要重新启动你的 apache。
并删除 main.php
中的 assetManager
所以我通常在外部服务器上工作,但决定在我的 windows 8.1 计算机上以 WAMPserver 的形式设置本地环境。
从 (git bash) 控制台,我可以 运行 lessc 没有问题,但是当我安装 Yii2 并尝试处理 .less 时,它说它不能找到命令。
AssetConverter command 'lessc "C:/wamp/www/basic/web/css/site.less" "C:/wamp/www/basic/web/css/site.css" --no-color --source-map' failed with exit code 1:
STDOUT:
STDERR:
'lessc' is not recognized as an internal or external command,
operable program or batch file.
据我所知,这应该可行。事实上,当我 运行 来自控制台的相同命令时,它工作得很好。我在这里错过了一步吗?任何帮助将不胜感激。
最终通过更改命令以直接引用 lessc.cmd 来修复它
'assetManager'=>[
'converter' => [
'class' => 'yii\web\AssetConverter',
'commands' => [
'less' => ['css', 'c:\path\to\lessc.cmd {from} {to} --no-color'],
],
],
],
对这个修复不太满意,因为这意味着我在去 'live' 时需要更改我的设置,但没有其他任何效果。我尝试将它符号链接到 yii 目录、命令目录等。但是没有用。
我刚刚修好了。
你应该怎么做?
- 确保你可以 运行 cmd 中的 lessc windows.If 你不能,用 node.js 安装它 Install lessc with node.js
- 确保系统path.Mine中的lessc路径是
C:\Users\l7861\AppData\Roaming\npm
或者你可以在cmd中键入where lessc
windows来找到它。 - 确保你可以在
path_info()
中看到 lessc 路径。如果你不能重新启动你的 apache 服务器。 - 终于不用在config中添加addassetManager了~~~~~
下面是一个发现过程。
我只是认为这是 first.So 上 yii2 的一个错误 我用 Phpstrom.And 调试它 我看到了这一行:path\to\vendor\yiisoft\yii2\web\AssetConverter.php 91
$command = Yii::getAlias($command);
$command = strtr($command, [
'{from}' => escapeshellarg("$basePath/$asset"),
'{to}' => escapeshellarg("$basePath/$result"),
]);
$descriptor = [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$proc = proc_open($command, $descriptor, $pipes, $basePath);
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
foreach ($pipes as $pipe) {
fclose($pipe);
}
$status = proc_close($proc);
if ($status === 0) {
Yii::trace("Converted $asset into $result:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
} elseif (YII_DEBUG) {
throw new Exception("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr");
} else {
Yii::error("AssetConverter command '$command' failed with exit code $status:\nSTDOUT:\n$stdout\nSTDERR:\n$stderr", __METHOD__);
}
return $status === 0
}
只有当 $status 不为 0 时,才会收到错误消息。
这通常意味着 $command 有问题。
当我运行这里时,我可以看到它是'lessc "path/to/frontend/web/less/main.less" "path/to/frontend/web/less/main.css" --no-color';
而我运行它在cmd.Thencss文件是由它创建的
我在下面写了一个类似的代码,就像那个函数
$command='lessc "path/to/frontend/web/less/main.less" "path/to/frontend/web/less/main.css" --no-color';
$basePath="path/to/frontend/web";
$descriptor = [
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$process = proc_open($command, $descriptor, $pipes /* $cwd, $env */ );
print_r($pipes);
$stdout = stream_get_contents($pipes[1]);
echo mb_convert_encoding($stdout, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );
$stderr = stream_get_contents($pipes[2]);
echo mb_convert_encoding($stderr, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );
if (is_resource($process)) {
fwrite($pipes[1], '<?php print_r($_ENV); ?>');
fclose($pipes[1]);
echo stream_get_contents($pipes[2]);
fclose($pipes[2]);
$return_value = proc_close($process);
echo "command returned $return_value\n";
}
和运行它在browser.Then我得到一个错误“lessc不被识别为内部或外部命令”。
所以我更改了配置文件 config/main.php,
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
],
'assetManager' => [
'converter' => [
'class' => 'yii\web\AssetConverter',
'commands' => [
'less' => ['css', 'lessc {from} {to} --no-color'],
],
],
],
],
'name' => 'FavorTGD',
];
我得到了一个相同的 message.So 我查看了 php_info()
,path.there 中没有 lessc 程序 there.That 你只需要重新启动你的 apache。
并删除 main.php
中的 assetManager