【问题标题】:External dependencies (like bootstrap) in MeteorMeteor 中的外部依赖项(如引导程序)
【发布时间】:2012-04-26 12:10:34
【问题描述】:

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

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

有没有办法让流星忽略某些路径? public/ 听起来很接近;但我真的不想提供引导存储库。

另外,这可能会解决 LESS,但是在引导程序中处理 JS 扩展的适当方法是什么?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我想出了一个潜在的解决方案。 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.
      

      【讨论】:

      • FWIW 我刚刚解决了这个问题:cat PATH_TO_BOOTSTRAP/less/* | grep -v import | egrep -v \^// &gt; bootstrap-concat.less。丑陋的罪恶,但很有魅力,让我可以导入所有内容:)
      • 最新的流星包括一个用于 boostrap 的包,不确定这是否能解决您的问题,但如果您进行流星更新然后流星添加 boostrap,您现在应该在您的应用程序上安装 twitter boostrap。跨度>
      • 使用LESS的好处是容易定制——你知道Meteor bootstrap包是不是从LESS动态编译的吗?
      • 为了回答我自己的问题,我查看了 /usr/lib/meteor/packages/bootstrap .. 那里没有 LESS,只有 CSS,所以看起来 Meteor 引导程序包只使用了直接的 CSS。
      猜你喜欢
      • 2018-01-31
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 2019-05-08
      • 2013-05-10
      • 1970-01-01
      相关资源
      最近更新 更多