簡體   English   中英

在Meteor package.js中使用NPM軟件包

[英]Using NPM packages in Meteor package.js

我正在嘗試使用glob NPM模塊來簡化向Meteor包中添加文件的操作:

Package.on_test(function(api) {
  Npm.depends({
    "glob": "3.2.7"
  });

  var glob = Npm.require("glob");
  api.add_files(glob.sync("styles/**/*.styl"), "client");
  api.add_files(glob.sync("tests/styles/**/*.@(styl|css)"), "client");
});

這將行不通,因為直到后來, glob目錄都不會添加到.npm/package/node_modules 如果我嘗試運行meteor test-packages ./我收到錯誤消息:

找不到npm模塊'glob'。 您忘了給“ Npm.depends”打電話嗎?

但是,我可以這樣做誘使Meteor進行這項工作:

Package.on_test(function(api) {
  Npm.depends({
    "glob": "3.2.7"
  });

  var glob = Npm.require("glob");
  if (glob) {
    api.add_files(glob.sync("styles/**/*.styl"), "client");
    api.add_files(glob.sync("tests/styles/**/*.@(styl|css)"), "client");
  }
});

現在,我第一次運行meteor test-packages ,該應用程序加載了NPM依賴項,然后崩潰了。 如果我再次運行它,則已添加了glob程序包,並且一切正常。 所以我想知道,除了Underscore和package.js內部的fspath類的內置模塊之外,是否還有更好的方法來使用Npm模塊?

我意識到我可以使用fs來仿真此功能,但是globpattern語法更加簡潔易讀。

我不確定這是否有幫助,但是添加npm模塊有一種“欺騙”方式。

如果您正在測試,則可以使用npm install glob -g全局安裝'glob'並npm install glob -g並使用類似以下內容:

var glob = eval("require('glob');");

流星的鏈接器模塊無法解釋並更改它,因此您可以直接鏈接到npm模塊,因此可以使用它連接到全局npm模塊而不是本地模塊。

Npm.require首次運行在package.js中不起作用的原因是,鏈接器使用package.js來創建所需的npm模塊以及如何將其鏈接的想法。

之后,運行項目,並且可以將Npm.require文件中與api.add_files關聯的文件中的api.add_files一起api.add_files

但是,如果要使用邏輯來確定要添加的文件,則必須訪問較低級別的文件,這就是運行eval()的代碼可以做到的。

另一種選擇是手動安裝Npm模塊並使用eval加載它。 盡管它的級別很低,所以可能比它的價值更麻煩。 有關如何安裝npm文件的詳細信息, 參見https://github.com/meteor/meteor/blob/devel/tools/meteor_npm.js

它基本上會創建一個“ shrinkwrap”,然后安裝npm模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM