强制不同的npm模块共享相同的依赖关系

时间:2019-01-31 08:44:11

标签: javascript node.js npm

很抱歉,NOOB问题,我是npm和前端开发的新手。

我有一个库(A),该库需要为单例,但具有通过启动配置的初始化。我也有一个库B,它具有库A作为依赖项。在我的Web客户端中,我需要直接引用库A,同时也要引用库B。我在我的Web客户端中初始化库A。

根据我的调查,看来我的Web客户端和库B使用的是库A的副本,因此,由于库A仅用作单例,因此库B对库A的调用因save: function( props ) { const { attributes, className } = props; const wrapperStyle = { backgroundColor: attributes.backgroundColor, backgroundImage: attributes.backgroundImage && 'url(' + attributes.backgroundImage + ')', }; const classes = classnames( className, { [ `has-${ attributes.includeContent ? 'content' : 'no-content' }` ] : attributes.includeContent }, { [ `align${ attributes.align }` ]: attributes.align && attributes.fullWidthBackground }, dimRatioToClass( attributes.backgroundOpacity ), { 'has-background-dim': attributes.backgroundOpacity !== 0, }, attributes.position, ); return ( <div style={ wrapperStyle } className={ classes }> <div className="wrapper-inner"> <div className="wrapper-inner-blocks"> { attributes.includeContent === true && <InnerBlocks.Content /> } </div> </div> </div> ); } 而失败。 / p>

undefined

在我的Web客户端库中,package.json中引用了A和B。我的问题是,有没有办法告诉库B使用Web客户端直接引用的库A?

1 个答案:

答案 0 :(得分:1)

此在NPM 3和更高。

支持

只要library Alibrary B的版本约束在web-clientlibrary A中安装,library B的一个副本将被web-clientlibrary B使用。 web-client个依赖项。

如果版本限制不匹配,则library Alibrary A将拥有自己的npm dedupe 副本。

这是可能得到的多个副本node_modules如果项目的依赖并没有同时安装。

在这种情况下

npm i

或删除import re from django.conf import settings from django.utils.translation import get_language from django import forms from django.utils import formats, timezone class BootstrapDatePicker(forms.DateInput): format_re = re.compile(r'(?P<part>%[bBdDjmMnyY])') def __init__(self, attrs=None, format=None): ''' for a list of useful attributes see: http://bootstrap-datepicker.readthedocs.io/en/latest/options.html Most options can be provided via data-attributes. An option can be converted to a data-attribute by taking its name, replacing each uppercase letter with its lowercase equivalent preceded by a dash, and prepending "data-date-" to the result. For example, startDate would be data-date-start-date, format would be data-date-format, and daysOfWeekDisabled would be data-date-days-of-week-disabled. ''' # final_attrs provides: # - data-provide: apply datepicker to inline created inputs # - data-date-language: apply the current language # - data-date-format: apply the current format for dates final_attrs = { 'data-provide': 'datepicker', 'data-date-language': get_language(), 'data-date-format': self.get_date_format(format=format), 'data-date-autoclose': 'true', 'data-date-clear-btn': 'true', 'data-date-today-btn': 'linked', 'data-date-today-highlight': 'true', } if attrs is not None: classes = attrs.get('class', '').split(' ') classes.append('datepicker') attrs['class'] = ' '.join(classes) final_attrs.update(attrs) super(BootstrapDatePicker, self).__init__(attrs=final_attrs, format=format) def get_date_format(self, format=None): format_map = { '%d': 'dd', '%j': 'd', '%m': 'mm', '%n': 'm', '%y': 'yy', '%Y': 'yyyy', '%b': 'M', '%B': 'MM', } if format is None: format = formats.get_format(self.format_key)[0] return re.sub(self.format_re, lambda x: format_map[x.group()], format) @property def media(self): root = 'vendor/bootstrap-datepicker' css = {'screen': ('vendor/bootstrap-datepicker/css/bootstrap-datepicker3.min.css',)} js = ['%s/js/bootstrap-datepicker.min.js' % root] js += ['%s/locales/bootstrap-datepicker.%s.min.js' % (root, lang) for lang, _ in settings.LANGUAGES] return forms.Media(js=js, css=css) 并使用

重新安装依赖项
class MyModelForm(BootstrapForm, forms.ModelForm):

    class Meta:
        model = myModel
        fields = ('field1', 'field2', 'date')
        widgets = {
            'data': BootstrapDateTimePicker(attrs={'class': 'form-control'}),
        }

会有所帮助。