更少的 Windows Node.js 挂起
Posted
技术标签:
【中文标题】更少的 Windows Node.js 挂起【英文标题】:Less Windows Node.js Hanging 【发布时间】:2012-02-20 05:41:35 【问题描述】:我一直在尝试在 Windows 上设置 Symfony2,以便我可以用更少的资源使用资产。
我已经为 Windows (0.6.8) 安装了 node.js。然后我跑了npm install less --global
,发现C:\Users\Matt\AppData\Roaming\npm\node_modules
少了
就我的 Symfony 设置而言,我有 Assetic
的主分支(由于我在 1.0.2 中读到的一个错误),但 AsseticBundle
的标准 v1.0.1
经过一些工作,我能够通过以下方式获得一个示例更少的文件来呈现: http://localhost/app_dev.php/css/compiled-main_part_1_boilerplate_1.css
然后我切换了一个 .less 文件,该文件@imports 其他 .less 文件(在同一个子目录中)。每当我尝试访问本地服务器上的那个页面(使用这种较少的配置)时,它就会挂起,我可以看到一个命令进程和一个 node.exe 进程都在运行。
该命令正在尝试运行我的临时目录中存在的 node.js 中的脚本。我可以在命令提示符下通过 node.js 运行该文件,但我无法使用 Symfony/Assetic 加载它。
在 Windows 上是否可以使用 node.js、less 和资产?
这是我的相关配置文件部分:
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
bundles: [FeedStreamMainBundle]
# java: /usr/bin/java
filters:
cs-s-rewrite: ~
less:
node: %assetic_node%
node_paths: [%assetic_less_path%]
yui_js:
jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
yui_css:
jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar
# closure:
# jar: %kernel.root_dir%/java/compiler.jar
开发配置覆盖:
assetic:
use_controller: true
在parameters.ini中:
assetic_node="C:\\Program Files (x86)\\nodejs\\node"
assetic_less_path="C:\\Users\\Matt\\AppData\\Roaming\\npm\\node_modules"
【问题讨论】:
我将参数更改为:assetic_less_path="C:\\web_workspace\\lib\\node_modules"
,我可以再次加载页面localhost/app_dev.php/css/…。然后我尝试再次加载该页面或正常页面,它只是再次挂起......
【参考方案1】:
是的,使用lessphp(服务器端)
Symfony2.1。如何集成资产lessphp过滤器。添加以下内容
打包到你的 composer.json:
"require": ... "leafo/lessphp": "dev-master", ...
运行 php composer.phar 更新
并更新您的 config.yml
#... assetic: #... filters: lessphp: file: %kernel.root_dir%/../vendor/leafo/lessphp/lessc.inc.php apply_to: "\.less$"
或使用less.js(客户端)
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>
【讨论】:
【参考方案2】:我使用了以下内容,这对我有用。请注意,它是“node.exe”,而不仅仅是节点。
node: "C:\\Program Files (x86)\\nodejs\\node.exe"
node_paths: ["C:\\Users\\Ben\AppData\\Roaming\\npm\\node_modules"]
apply_to: "\.less$"
【讨论】:
由于lessphp中less的新实现存在错误,所以这个解决方案有效【参考方案3】:由于没有人真正有任何答案,我只能假设很少有 Windows 开发人员在 Symfony2 中使用 LESS 和 node.js。
我的解决方案是使用lessphp,一旦我将它放入自动加载器,它就可以正常工作。
【讨论】:
我已经有一年没有调查过了。但可能不是。可能会打开一个问题? 我在这里开了一个github.com/symfony/AsseticBundle/issues/155如果可以的话,投票吧 Assetic 中有一个错误。我已经打开了一个拉取请求来修复它 github.com/kriswallsmith/assetic/pull/411 。原因是 env 变量 SystemRoot 没有传递给 node.js 进程。以上是关于更少的 Windows Node.js 挂起的主要内容,如果未能解决你的问题,请参考以下文章