добавление метода к встроенному классу в приложении для направляющих

Это потому, что указанный вами файл package.json зависимости не имеет свойства schematics, которое является путем к файлу определения схемы (файл JSON):

{
  "name": "@candiman/website",
  "version": "0.0.5",
  "peerDependencies": {
    "@angular/common": "^7.1.0",
    "@angular/core": "^7.1.0",
    "@ng-bootstrap/ng-bootstrap": "^2.0.0",
    "@fortawesome/angular-fontawesome": "0.1.0-9",
    "@fortawesome/fontawesome-svg-core": "^1.2.0-11",
    "@fortawesome/free-solid-svg-icons": "^5.1.0-8",
    "@fortawesome/free-regular-svg-icons": "^5.1.0-8",
    "@fortawesome/free-brands-svg-icons": "5.1.0-8",
    "bootstrap": "^4.0.0"
  },
  "main": "bundles/candiman-website.umd.js",
  "module": "fesm5/candiman-website.js",
  "es2015": "fesm2015/candiman-website.js",
  "esm5": "esm5/candiman-website.js",
  "esm2015": "esm2015/candiman-website.js",
  "fesm5": "fesm5/candiman-website.js",
  "fesm2015": "fesm2015/candiman-website.js",
  "typings": "candiman-website.d.ts",
  "metadata": "candiman-website.metadata.json",
  "sideEffects": false,
  "dependencies": {
    "tslib": "^1.9.0"
  }
}

См. package.json файл вашего пакета (на Unpkg) для получения дополнительной информации.

Ниже приведен пример того, как должны быть объявлены схемы вашего пакета:

{
  "name": "@candiman/website",
  "version": "0.0.5",
  "peerDependencies": {
    "@angular/common": "^7.1.0",
    "@angular/core": "^7.1.0",
    "@ng-bootstrap/ng-bootstrap": "^2.0.0",
    "@fortawesome/angular-fontawesome": "0.1.0-9",
    "@fortawesome/fontawesome-svg-core": "^1.2.0-11",
    "@fortawesome/free-solid-svg-icons": "^5.1.0-8",
    "@fortawesome/free-regular-svg-icons": "^5.1.0-8",
    "@fortawesome/free-brands-svg-icons": "5.1.0-8",
    "bootstrap": "^4.0.0"
  },
  "schematics": "./path/to/schematics.json",
  "dependencies": {
    "tslib": "^1.9.0"
  }
}

Что приведет к чему-то подобному при выполнении ng build project-name --prod:

{
  "name": "@candiman/website",
  "version": "0.0.5",
  "peerDependencies": {
    "@angular/common": "^7.1.0",
    "@angular/core": "^7.1.0",
    "@ng-bootstrap/ng-bootstrap": "^2.0.0",
    "@fortawesome/angular-fontawesome": "0.1.0-9",
    "@fortawesome/fontawesome-svg-core": "^1.2.0-11",
    "@fortawesome/free-solid-svg-icons": "^5.1.0-8",
    "@fortawesome/free-regular-svg-icons": "^5.1.0-8",
    "@fortawesome/free-brands-svg-icons": "5.1.0-8",
    "bootstrap": "^4.0.0"
  },
  "schematics": "./path/to/schematics.json",
  "main": "bundles/candiman-website.umd.js",
  "module": "fesm5/candiman-website.js",
  "es2015": "fesm2015/candiman-website.js",
  "esm5": "esm5/candiman-website.js",
  "esm2015": "esm2015/candiman-website.js",
  "fesm5": "fesm5/candiman-website.js",
  "fesm2015": "fesm2015/candiman-website.js",
  "typings": "candiman-website.d.ts",
  "metadata": "candiman-website.metadata.json",
  "sideEffects": false,
  "dependencies": {
    "tslib": "^1.9.0"
  }
}

21
задан inglesp 24 March 2009 в 12:01
поделиться

3 ответа

Один способ сделать это должно создать файл в lib/rails_extensions.rb. Затем добавьте свои расширения как так:

class Array
  def bring_me_food
    # ...
  end

  def make_tea
    # ...
  end
end

class Hash
  def rub_my_shoulders
    # ...
  end
end

Затем в config/environment.rb, добавьте это:

require 'rails_extensions'

Ваш пробег с подвластными объектами может варьироваться.

40
ответ дан 29 November 2019 в 20:17
поделиться

По умолчанию, когда Вы звоните, "требуют", направляющие заглянут (из граничного источника направляющих):

поставщик lib приложения/сервисов приложения/помощников приложения/контроллеров приложения/моделей приложения/металла приложения

Для пользы простоты помещенной, файл в lib/, и требует его по имени в Вашем config/environment.rb, или можно поместить его в config/initializers/array_extension.rb, и это будет автоматически загружено.

Где я работаю, мы поместили все наши расширения базовой библиотеки Ruby в плагин и сохранили ее в (Rails.root/) vendor/plugins/utilities/lib/core_ext, и затем мы требуем конкретных номеров в init.rb плагина.

Другой способ освежевать эту кошку: если Вы говорите, хотите сохранить свои базовые расширения в Rails.root/core_ext, то можно добавить что путь как путь загрузки в блоке конфигурации в environment.rb:

Rails::Initializer.run do |config|
  config.load_paths << 'core_ext'
end

Затем можно звонить, "требуют 'array_extension'" отовсюду, и он загрузится.

6
ответ дан 29 November 2019 в 20:17
поделиться

Просто поместите его в новый файл, например. array_extended.rb

class Array

  def my_new_method()
    ...
  end

end

После этого можно включать этот файл с require "array_extended.rb". Убедитесь, что Вы уже не переопределяете существующие методы, поскольку это может повредить другую функциональность.

0
ответ дан 29 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: