【问题标题】:NodeJS 'Require' loading library in coffeescript, empty object in JavascriptCoffeescript中的NodeJS“需要”加载库,Javascript中的空对象
【发布时间】:2015-03-18 09:36:00
【问题描述】:

我在 NodeJS 中遇到了一个有趣的问题,该问题时不时地在工作中弹出,但我一直无法弄清楚。

我在 CoffeeScript 中编写了一个后端,然后我使用 grunt-contrib-coffee 将其编译为 ~/bin 目录中的 Javascript。我还包含一个库,我使用适当的私钥在 Bitbucket 上私人托管,并通过 npm 安装。这个库也是用 coffeescript 编写的。

通常,我可以在 Javascript 中包含这个库而不会感到头疼,就像我对任何其他库一样使用简单的 require。但是,有时使用后端的服务器之一会获得更新,并且它会停止工作。当我去检查错误时,它总是一样的——“require”通过了,但它不是在 JavaScript 中加载实际的库,而是返回一个空对象 ({})。在 coffeescript 中运行代码仍然有效,但无论我做什么——重新编译、重新安装所有依赖项、删除并克隆存储库,问题仍然存在。

我已经没有什么想法了

在库 package.json 中:

{ 
    "name": "graph-engine",
    "main": "./lib/graph"
}

在图书馆的graph.coffee中

class Graph
    constructor: () ->
      # Perform init

module.exports = Graph

然后在app的package.json中:

{
    "graph-engine": "git+ssh://git@bitbucket.org:<team>/graph-engine.git"
}

最后,在应用本身:

GraphEngine = require "graph-engine"
engineInstance = new GraphEngine()

这在 coffeescript 中运行良好,但是在使用 grunt 编译应用程序时,grunt-contrib-coffee 的设置如下:

coffee:
  glob_to_multiple: 
    expand: true
    flatten: false
    cwd: 'src'
    src: ['**/*.coffee']
    dest: 'bin'
    ext: '.js'

运行编译后的应用程序时无法正确加载库,而是返回一个空对象。同样,我想强调这并不总是发生,因此我没有包含任何代码或 json 文件,因为我认为这是不相关的。

【问题讨论】:

  • 代码在哪里?我们有 zilch 在这里继续。

标签: javascript node.js ubuntu coffeescript


【解决方案1】:

虽然直到今天我还不清楚这种行为随机性的确切原因,但我发现它与这些用 CoffeeScript 编写的库有关。

似乎根据加载顺序,有时第三方库会注册咖啡脚本并且我自己的库会正确加载,而其他时候这些库会在我自己的库加载后加载,导致无法加载咖啡脚本。因此,结果证明解决方案相当简单——注册咖啡脚本。这可以通过将以下内容放在 node.js 应用程序的开头来完成:

require('coffee-script/register')

有关详细信息,请参阅documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多