【问题标题】:Require module in Atom's init.coffee在 Atom 的 init.coffee 中需要模块
【发布时间】:2018-04-08 15:55:57
【问题描述】:

我已经在谷歌上搜索过答案,因为这是一个常见问题,但所有回复都指向使用替代方案,而不是解释为什么这不起作用,所以我在这里问。

我将这段代码放在我的 Atom 的 init.coffee 脚本中: beautify = require('js-beautify').html

但是 Atom 失败了 Failed to load init.coffeeCannot find module 'js-beautify'。奇怪的是,这适用于一个包,如果我在 Atom 的控制台上键入完全相同的代码,它就可以工作。

当然,我可以为此编写一个包,实际上有几个可用的,这只是一个示例,因为我想学习如何从 init.coffee 中获取模块以供将来调整。

非常感谢!

【问题讨论】:

    标签: coffeescript atom-editor


    【解决方案1】:

    当您从init.coffee require() 时,Atom 会在自己的路径中查找这些模块。如果您有 oni = require('oniguruma') 来访问正则表达式函数,您可能希望这样做的一个示例。

    为了到达js-beautify,您必须指定其完整路径。到目前为止,只有明确声明整个绝对路径对我有用:

    beaut = require 'C:\\Users\\<username>\\.atom\\packages\\atom-beautify\\node_modules\\js-beautify'
    
    console.log beaut
    

    实际上,使用此类模块的最可靠方法是全局安装它,以便您可以链接到全局 NPM 文件夹。如果包被卸载,链接到包内的模块将会中断。

    【讨论】:

    • 感谢您的回复,Holland :) 这或多或少符合我的预期,但我在这里看到的问题是,在 Atom 的控制台中我实际上可以执行 require('js-beautify') 并且它有效,所以即使该模块不包含在 Atom 中,它在我的机器中,来自其他使用它的包,对吗?那么,为什么它在init.coffee 中不起作用?这就引出了我的第二个问题:假设js-beautify 不在我的机器上。好的,那么为什么 require('js-beautify') 可以从 atom-beautify (一个 Atom 的包)工作?包需要的时候Atom会下载吗?
    • 我不知道为什么你可以从控制台访问它而不是init.coffee。但是,我已经弄清楚如何让它发挥作用,所以我正在编辑我的答案。
    • 再次感谢您的示例,Holland。我想我知道为什么require 在控制台上工作:我安装了atom-beautify,即使我删除了包,js-beautify 模块仍然存在于来自node.js 或Electron 的某种编译缓存中,我不知道。问题是模块在那里。为什么它可以从控制台而不是 init.coffee 工作,除非提供了完整的路径超出了我的范围,但无论如何你的答案对我有用!非常感谢!
    猜你喜欢
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2014-06-12
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多