我在NodeJS中遇到一个有趣的问题,它偶尔会出现在工作中,而我却无法弄明白。
我已经在CoffeeScript中编写了一个后端,然后我将grunt-contrib-coffee编译到〜/ bin目录中的Javascript中。我还包括一个我私下在Bitbucket上托管的库和相应的私钥,并通过npm安装。这个库也是用coffeescript编写的。
通常我能够在Javascript中包含这个库而不会有任何麻烦,使用简单的需求就像我对任何其他库一样。但是,偶尔使用后端的其中一台服务器会获得更新,并且它会停止工作。当我去检查错误时,它始终是相同的 - '要求'传递,但它不是在JavaScript中加载实际的库,而是返回一个空对象({})。在coffeescript中运行代码仍然有效,但无论我做什么 - 重新编译,重新安装所有依赖项,删除和克隆存储库,问题仍然存在。
我已经没有了解自己的想法,所以我希望此前有人遇到过这个问题,并且可能会指出我正确的方向。
在库package.json中:
{
"name": "graph-engine",
"main": "./lib/graph"
}
在图书馆的graph.coffee中
class Graph
constructor: () ->
# Perform init
module.exports = Graph
然后在应用程序的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文件,因为我认为它是无关的。
答案 0 :(得分:0)
虽然这种行为随机性的确切原因使我直到今天,但我发现它与使用CoffeeScript编写的这些库有关。
似乎根据加载顺序,偶尔第三方库会注册咖啡脚本,我自己的库会正确加载,而有时这些库会在我自己的库加载后加载,导致无法加载coffeescript。因此,解决方案结果相当简单 - 注册coffeescript。这可以通过将以下内容放在node.js app的开头来完成:
require('coffee-script/register')
有关详细信息,请参阅documentation。