Meteor中的外部依赖(如bootstrap)

时间:2012-04-14 09:27:41

标签: javascript meteor

假设我有像Bootstrap这样的外部依赖。我想从那里导入一些LESS,因为这样我可以在我的代码中使用Bootstrap mixins。

由于Meteor已经在我的树中编译和连接所有LESS(对吗?),只需复制LESS目录然后手动更新它一次不是解决方案。实际上,使用默认的LESS目录,似乎每个LESS源文件将在输出中出现两次:一次因为它是bootstrap.less导入的,因为文件本身一次。

有没有办法让meteor忽略一些路径? public/听起来很近;但我真的不想服务于bootstrap repo。

另外,这可能会为LESS修复它,但是在bootstrap中处理JS扩展的适当方法是什么?

2 个答案:

答案 0 :(得分:3)

我找到了一个潜在的解决方案。 Meteor希望将所有内容捆绑在其目录中...所以让我们将依赖项放在其可用范围之外:)

使用以下目录结构:

.
|-- ext
|   `-- bootstrap
`-- myapp
    |-- .meteor
    `-- ...

在我的LESS文件中,我执行以下操作:

@BOOTSTRAP: "../../ext/bootstrap/less";
@import "@{BOOTSTRAP}/reset.less";

这仍然不起作用,但我认为这可归因于a LESS bug

不幸的是,Meteor产生的错误消息在这里完全没用:

[[[[[ ~/Code/igl/igl ]]]]]

Running on: http://localhost:3000/
Errors prevented startup:
Exception while bundling application:
ReferenceError: err is not defined
    at /usr/local/meteor/packages/less/package.js:33:62
    at [object Object].add_file (/usr/local/meteor/app/lib/bundler.js:193:5)
    at /usr/local/meteor/app/lib/bundler.js:97:16
    at Array.forEach (native)
    at Function.<anonymous> (/usr/local/meteor/app/lib/third/underscore.js:76:11)
    at /usr/local/meteor/app/lib/bundler.js:96:11
    at Array.forEach (native)
    at Function.<anonymous> (/usr/local/meteor/app/lib/third/underscore.js:76:11)
    at Object.add_files (/usr/local/meteor/app/lib/bundler.js:95:9)
    at [object Object].on_use (/usr/local/meteor/app/lib/packages.js:136:11)
Your application is crashing. Waiting for file change.

答案 1 :(得分:0)

根据我的经验,直接在Meteor项目中包含Bootstrap LESS文件是个坏主意:

  • 它将使您的开发环境变得更慢,因为许多额外的文件需要由Meteor转换并由您的浏览器提取。
  • 它不满足明确依赖于核心引导程序包的第三方程序包的依赖性。如果你添加其中一个,你的项目最终会有两个bootstrap。
  • 包的资源早于项目文件加载。如果你有一个扩展bootstrap的外部包,它的样式将在bootstrap之前加载。
  • 必须将所有导入重命名为以.lessimport结尾,这使得很难跟上较新的bootstrap版本。
  • Meteor加载bootstrap javascript文件的顺序(按字母顺序排列)不正确,导致Javascript错误只能通过重命名文件来修复。

我创建了一个shell脚本,用于从预编译的发行版或您自己的Bootstrap Git存储库的克隆生成自定义引导程序Meteor包。

您可以在此处找到它以及使用信息: https://github.com/wojas/meteor-package-bootstrap