【问题标题】:Load coffee script module in Angular在 Angular 中加载咖啡脚本模块
【发布时间】:2025-12-04 10:55:01
【问题描述】:

我有一个 Angular-CLI 应用程序,我尝试引入第三方依赖项,它是用 Coffee Script 编写的。这就是我在组件中所做的:

const CoffeeWidget = require('coffee-loader!CoffeeWidget');

我认为使用咖啡装载机会起作用。但不是真的。现在我可以阅读index.coffee,但在我的index.coffeerequire 其他咖啡文件中。喜欢:

Cup = require '../tools/cup.coffee'

但是准备cup.coffee 并说:You may need an appropriate loader to handle this file type.

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 我不认为需要.coffee文件那么简单,您需要先将其转译为TS。你可以使用这个工具npmjs.com/package/coffee-script-to-typescript
  • 开发人员似乎不再支持此功能。如果不总是在编译我的应用程序之前运行此步骤,我将如何做到这一点?

标签: angular webpack coffeescript angular-cli


【解决方案1】:

由于您将coffee-loader 直接用于require statement,因此webpack 将仅在所需文件上使用加载器。

为了让 webpack 在任何深度找到的任何 .coffee 文件上使用 coffee-loader,请在 webpack 配置中扩展 module.rules 数组:

// Webpack 2 syntax

module.exports = {
  module: {
    rules: [
      {
        test: /\.coffee$/,
        use: [ 'coffee-loader' ]
      }
    ]
  }
}

【讨论】:

  • 这有很大帮助!谢谢!但是还有一件小事。 CoffeeScript Widget 是第三方工具。现在,它不需要像Cup = require '../tools/cup.coffee' 那样严格地依赖它,而是Cup = require '../tools/cup。所以基本上.coffee 不见了。 .coffee 是强制性的吗?没有它编译器将无法编译,但我不想对第三方库进行更改。
  • 由于您要导入的模块是一个已发布的第三方工具,它应该带有一个可以在 vanilla JS 中导入的预编译版本。这通常是使用 3rd 方代码的最佳实践。你的插件错过了吗?
  • /\.coffee$/ 只是一个正则表达式,Webpack 针对每个要求文件运行它以选择要使用的加载器。您可能会尝试编写一个适当的正则表达式,让coffe-loader 只针对您的插件所需的文件。也可以考虑声明include or exclude loader options
  • 我正在与咖啡脚本库的开发人员联系。在这种情况下,最好请他编译它。我不确定自己是否必须编译它,或者我是否应该收到编译后的版本。
  • 啊!并且只是在一个站点节点上。你说这样的库应该总是预编译的。你会对反应组件说同样的话吗?从本质上讲,jsx 和 angular 的结尾并不能真正解决这个问题。
最近更新 更多