【问题标题】:Allow users to manage dependency version of an npm module允许用户管理 npm 模块的依赖版本
【发布时间】:2017-01-05 15:47:06
【问题描述】:

我正在构建一个将 THREE.js 作为依赖项的模块。我正在尝试找出将 THREE 包含为依赖项并使其可供模块和模块用户访问的最佳方法(用户将需要访问其项目中的 THREE 库)。我想出了两种方法来完成这项工作:

一个:

添加THREE作为模块的依赖,在模块中导入整个库并将其添加为全局变量,如下所示:

import * as THREE from 'three'; 
window.THREE = THREE;

这里的缺点是我负责使用哪个版本的 THREE,并且还要导入整个库(THREE 最近切换到模块化构建,因此不再需要包含整个库)。

两个:

添加三个作为模块的依赖项并且要求用户将其添加为他们项目的依赖项。这里的想法是我现在可以只从项目中导入我需要的东西:

import { Scene, Camera } from 'three'; 

并且用户可以在他们的项目中导入他们需要的内容,从而减小文件大小。

这里的问题是,现在安装了两个副本 THREE,它们可能是不同且不兼容的版本。有没有办法将我的模块指向顶级模块,以便他们可以管理已安装的 THREE 版本?

【问题讨论】:

  • 我在与您类似的情况下看到的情况是让用户负责将依赖项传递给您的模块。在你这边,你使用他们给你的three.js,如果他们忘记添加你需要的模块,你会返回一个错误。
  • 现在只是在研究这个,但是我对如何将依赖项传递给模块持空白。你有什么建议吗?
  • 简单方法:公开一个“init”函数,该函数接受一个参数,您将其作为全局变量放入模块中,并在其他地方使用,就像它是库一样。否则,您应该能够通过将整个 module.exports 设置为函数,并将参数用作库来从 require 本身获取参数。

标签: javascript node.js npm three.js node-modules


【解决方案1】:

我看到的做法和这个类似,但我从来没有在生产中做过类似的事情,所以我个人不知道它的强度:

main.js:

'use strict';
const three = require('three'),
    mod = require('yourModule');

mod.init(three);
//...

你的Module.js:

'use strict';
let three = {};
function init(t) {
    three = t;
}
//...
modules.export = {
    init: init
    //...
};

或者

main.js:

'use strict';
const three = require('three'),
    mod = require('yourModule')(three);

你的Module.js:

'use strict';
module.exports = (three) => {
    //...
};

【讨论】:

  • 谢谢 - 我最终以一种更简单的方式解决了这个问题,事后看来很明显。只需在我的模块之前加载三个:import THREE from 'three' 然后window.THREE = THREE 然后我加载我的模块并且全局变量可用。不过感谢您的建议,我不知道 module.exports 可能是一个函数。
  • 不客气。如果您认为答案正确且对您有帮助,您可以将其标记为已接受。您还可以发布自己的答案,描述您如何解决问题,并接受它。如果您的答案比现有答案更好,它不会被皱眉,甚至会受到鼓励。它还会从“未回答”列表中删除问题,很多人会浏览该列表以寻找没有有用答案的问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2021-07-11
  • 2015-10-17
  • 2018-10-12
  • 1970-01-01
  • 2011-01-06
  • 2022-01-13
相关资源
最近更新 更多