更少的 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 挂起的主要内容,如果未能解决你的问题,请参考以下文章

为啥在这段代码中向量比指针使用更少的内存?

如何创建高性能可扩展的Node.js应用?

node.js:程序要么意外退出,要么只是挂起

node.js 应用程序突然以 100% 加载 CPU 并挂起

更少的颜色混合[重复]

Node.js HTTP2 服务器错误:套接字挂起