Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可能包含取决于用户是否安装了特定软件包的功能(可选功能)_Javascript_Node.js_Reactjs_Npm_Ecmascript 6 - Fatal编程技术网

Javascript 是否可能包含取决于用户是否安装了特定软件包的功能(可选功能)

Javascript 是否可能包含取决于用户是否安装了特定软件包的功能(可选功能),javascript,node.js,reactjs,npm,ecmascript-6,Javascript,Node.js,Reactjs,Npm,Ecmascript 6,我正在编写一个模块,如果用户在其项目react intl中安装了该模块,我希望导出一个具有翻译功能的高级组件 这样我就不必维护两个版本的组件来避免安装警告 我一直在尝试使用OptionalDependenceny,但是当用户安装我的软件包时,它们被安装在用户的项目上 通常,这是我试图导入的源 /** * * ToggleOption * */ import React from 'react'; import PropTypes from 'prop-types'; import Option

我正在编写一个模块,如果用户在其项目react intl中安装了该模块,我希望导出一个具有翻译功能的高级组件

这样我就不必维护两个版本的组件来避免安装警告

我一直在尝试使用OptionalDependenceny,但是当用户安装我的软件包时,它们被安装在用户的项目上

通常,这是我试图导入的源

/**
*
* ToggleOption
*
*/

import React from 'react';
import PropTypes from 'prop-types';
import Option from 'bootstrap-styled/lib/Option';

let injectIntl;
let intlShape;

// this make react-intl optional to our component and our module
try {
  const reactIntl = require('react-intl'); // eslint-disable-line
  injectIntl = reactIntl.injectIntl; // eslint-disable-line
  intlShape = reactIntl.intlShape; // eslint-disable-line
} catch (er) {
  injectIntl = null;
  intlShape = null;
}

/**
 * This component is automatically used when using `<Toggle />`
 * If you need a different option tag, instead just pass the prop `optionTag` of `<Toggle />`.
 */
const ToggleOption = ({
  tag: Tag,
  value,
  message,
  intl,
}) => (
  <Tag value={value}>
    {message && intl ? intl.formatMessage(message) : value}
  </Tag>
);

ToggleOption.defaultProps = {
  tag: Option,
};

/* eslint-disable react/require-default-props */
ToggleOption.propTypes = {
  /**
   * Replace the default component tag by the one specified. Can be:
   */
  tag: PropTypes.oneOfType([
    PropTypes.string,
    PropTypes.element,
    PropTypes.func,
  ]),
  /**
   * The value
   */
  value: PropTypes.string.isRequired,
  /**
   * react-intl messages (optional)
   */
  message: PropTypes.object,
};

let exported = ToggleOption; // eslint-disable-line import/no-mutable-exports

if (intlShape) {
  /** @ignore */
  ToggleOption.propTypes.intl = intlShape.isRequired;
  exported = injectIntl(ToggleOption);
}

export default exported;

是否有办法配置我的模块以实现此目的?

您可以检查if typeof module是否已包含/需要模块!==未定义

如果您想包括/需要可能已安装的模块,另一个选项是

祝你好运

编辑:


至于使用,它不会更改您的代码-您仍然必须使用try/catch执行相同的检查。

您可以检查if typeof module是否已包含/需要某个模块!==未定义

如果您想包括/需要可能已安装的模块,另一个选项是

祝你好运

编辑:


至于使用,它不会更改您的代码-您仍然必须使用try/catch执行相同的检查。

包中的可选依赖项。json始终默认安装。要避免这些问题,您必须使用以下设备安装:

npm install [PACKAGE] --no-optional
例如,你可以在你的描述中注意到它,就像我一样:


PS:您的代码很好。

您的package.json中的可选依赖项始终默认安装。要避免这些问题,您必须使用以下设备安装:

npm install [PACKAGE] --no-optional
例如,你可以在你的描述中注意到它,就像我一样:


PS:您的代码很好。

我不确定他有什么问题,但我猜他是在问如何避免安装该软件包,因为它是可选的。附言:我没有投反对票。@JorgeFuentesGonzález-谢谢你的解释。我想我的答案并不适合OP的要求。。。但也许我真的不明白这个问题_ツ_/''此外,JavaScript没有用于已安装模块的名称空间。你需要事先要求他们。最接近的方法是检查全局变量,因为在浏览器中,注入库的典型非网页包方式是将它们添加到窗口中,因此您可以使用if window.Module或if typeof Module!==未定义,但如果模块。。。如果模块未定义,将抛出模块未定义错误。我本来打算回答try/catch问题,但看到了你的-1,所以我试图用其他方式理解这个问题xD有点不清楚。@JorgeFuentesGonzález-谢谢你的回答。我修复了丢失的字体。至于名称空间,我修正了这个问题,但我把它放在了括号里。我猜术语可能与C++或RIST不同,但是全局变量执行的函数定义了所有函数,因为该变量的成员可以防止冲突……我不确定他有什么问题,但我猜他是在询问如何避免安装包,因为它是可选的。附言:我没有投反对票。@JorgeFuentesGonzález-谢谢你的解释。我想我的答案并不适合OP的要求。。。但也许我真的不明白这个问题_ツ_/''此外,JavaScript没有用于已安装模块的名称空间。你需要事先要求他们。最接近的方法是检查全局变量,因为在浏览器中,注入库的典型非网页包方式是将它们添加到窗口中,因此您可以使用if window.Module或if typeof Module!==未定义,但如果模块。。。如果模块未定义,将抛出模块未定义错误。我本来打算回答try/catch问题,但看到了你的-1,所以我试图用其他方式理解这个问题xD有点不清楚。@JorgeFuentesGonzález-谢谢你的回答。我修复了丢失的字体。至于名称空间,我修正了这个问题,但我把它放在了括号里。我猜术语可能与C++或RIST不同,但是全局变量执行的函数与定义该函数的所有成员的函数几乎相同,可以防止碰撞。我猜我帮助过了6K标记。一开始我没注意到,但看起来很不错:-@Myst正是哈哈。我想我帮你通过了6K。一开始我没注意到,但看起来很不错:-@Myst正是哈哈。Thnx^^