NodeJS 'Require' 在 coffeescript 中加载库,在 Javascript 中加载空对象
NodeJS 'Require' loading library in coffeescript, empty object in Javascript
我在 NodeJS 中遇到了一个有趣的问题,该问题时不时会在工作中出现,但我一直无法弄清楚。
我用 CoffeeScript 编写了一个后端,然后用 g运行t-contrib-coffee 将其编译到 ~/bin 目录中的 Javascript 中。我还包括一个库,我使用适当的私钥在 Bitbucket 上私下托管它,并通过 npm 安装。这个库也是用 coffeescript 写的。
通常我可以毫不费力地将这个库包含在 Javascript 中,就像我对任何其他库一样使用简单的要求。但是,偶尔其中一台使用后端的服务器会获得更新,然后停止工作。当我去检查错误时,它总是一样的 - 'require' 通过,但不是在 JavaScript 中加载实际的库,而是 returns 一个空对象 ({})。 运行 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 中运行良好,但是当使用 g运行t 编译应用程序时,对 g运行t-contrib-coffee 进行以下设置:
coffee:
glob_to_multiple:
expand: true
flatten: false
cwd: 'src'
src: ['**/*.coffee']
dest: 'bin'
ext: '.js'
编译后的应用程序 运行 无法正确加载库,而是返回一个空对象。再次强调,这并不总是会发生,因此我没有包含任何代码或 json 文件,因为我认为它们是不相关的。
尽管我至今仍不清楚行为随机性的确切原因,但我发现它与这些用 CoffeeScript 编写的库有关。
好像根据加载顺序,有时候第三方库会注册coffee脚本,而我自己的库会正确加载,而其他时候这些库会在我自己的库加载后加载,导致无法加载咖啡脚本。因此,解决方案非常简单——注册 coffeescript。这可以通过将以下内容放在 node.js 应用程序的开头来完成:
require('coffee-script/register')
请参阅 documentation 了解更多信息。
我在 NodeJS 中遇到了一个有趣的问题,该问题时不时会在工作中出现,但我一直无法弄清楚。
我用 CoffeeScript 编写了一个后端,然后用 g运行t-contrib-coffee 将其编译到 ~/bin 目录中的 Javascript 中。我还包括一个库,我使用适当的私钥在 Bitbucket 上私下托管它,并通过 npm 安装。这个库也是用 coffeescript 写的。
通常我可以毫不费力地将这个库包含在 Javascript 中,就像我对任何其他库一样使用简单的要求。但是,偶尔其中一台使用后端的服务器会获得更新,然后停止工作。当我去检查错误时,它总是一样的 - 'require' 通过,但不是在 JavaScript 中加载实际的库,而是 returns 一个空对象 ({})。 运行 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 中运行良好,但是当使用 g运行t 编译应用程序时,对 g运行t-contrib-coffee 进行以下设置:
coffee:
glob_to_multiple:
expand: true
flatten: false
cwd: 'src'
src: ['**/*.coffee']
dest: 'bin'
ext: '.js'
编译后的应用程序 运行 无法正确加载库,而是返回一个空对象。再次强调,这并不总是会发生,因此我没有包含任何代码或 json 文件,因为我认为它们是不相关的。
尽管我至今仍不清楚行为随机性的确切原因,但我发现它与这些用 CoffeeScript 编写的库有关。
好像根据加载顺序,有时候第三方库会注册coffee脚本,而我自己的库会正确加载,而其他时候这些库会在我自己的库加载后加载,导致无法加载咖啡脚本。因此,解决方案非常简单——注册 coffeescript。这可以通过将以下内容放在 node.js 应用程序的开头来完成:
require('coffee-script/register')
请参阅 documentation 了解更多信息。