我在NodeJS中遇到了一个有趣的问题,这个问题在工作中时有发生,但我一直没能弄清楚。
我用CoffeeScript编写了一个后端,然后在~/bin目录中将其编译成Javascript。我还包括一个库,我在Bitbucket上使用适当的私钥私下托管它,并通过npm安装。这个库也是用coffeescript编写的。
通常,我可以将这个库包含在Javascript中,而不会让人头疼,使用一个简单的要求,就像对任何其他库一样。但是,偶尔会有一个使用后端的服务器得到更新,并且停止工作。当我去检查错误时,它总是相同的- 'require‘传递,但是它没有在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编译应用程序时,可以使用以下设置来设置咕噜-控制-咖啡:
coffee:
glob_to_multiple:
expand: true
flatten: false
cwd: 'src'
src: ['**/*.coffee']
dest: 'bin'
ext: '.js'在运行编译后的应用程序时,它无法正确加载库,而是返回一个空对象。再次,我想强调的是,这种情况并不总是发生,因此我不包括任何代码或json文件,因为我认为它是不相关的。
发布于 2015-08-20 19:13:30
虽然这种行为的随机性的确切原因至今还没有解决,但我发现它与用CoffeeScript编写的这些库有关。
根据加载顺序,有时第三方库会注册咖啡脚本,而我自己的库将正确加载,而其他时候,这些库将在加载自己的库之后加载,从而导致无法加载coffeescript。因此,这个解决方案非常简单--注册coffeescript。这可以通过在node.js应用程序的开头放置以下内容来完成:
require('coffee-script/register')有关更多信息,请参考文档。
https://stackoverflow.com/questions/29118455
复制相似问题