Подтвердить что ты не робот

Добавить модуль node в ember CLI app

Я хотел бы использовать этот Node.js модуль https://www.npmjs.com/package/remarkable-regexp в своем приложении Ember-CLI.

Как сделать его доступным для приложения Ember?

Я попробовал это, добавив это в Brocfile.js

app.import('node_modules/remarkable-regexp/index.js');

но это не так:

Путь или шаблон "node_modules/remarkable-regexp/index.js" не сопоставить любые файлы

4b9b3361

Ответ 1

Так как remarkable-regexp является модулем npm, я считаю, что лучший способ его интеграции с ember-cli заключается в использовании ember-browserify.

В вашем приложении ember-cli вы можете установить аддон, запустив npm install --save-dev ember-browserify

Таким образом, вы можете импортировать модули с помощью импорта ES6, предварительно используя npm:

import Remarkable from 'npm:remarkable';
import Plugin from 'npm:remarkable-regexp';

var plugin = Plugin(
  // regexp to match
  /@(\w+)/,

  // this function will be called when something matches
  function(match, utils) {
    var url = 'http://example.org/u/' + match[1]

    return '<a href="' + utils.escape(url) + '">'
      + utils.escape(match[1])
      + '</a>'
  }
)

new Remarkable()
  .use(plugin)
  .render("hello @user")

// prints out:
// <p>hello <a href="http://example.org/u/user">user</a></p>

Ответ 2

ember-browserify - отличный выбор для использования в приложениях, и работа выполнена, чтобы позволить Ember CLI импортировать пакеты NPM без какой-либо дополнительной помощи.

Однако, если вы пытаетесь выполнить эту работу как в аддонах, так и в приложениях, вы можете использовать несколько иной подход, который заключается в том, чтобы вручную модифицировать цепочку сборки брокколи, чтобы включить ваш пакет Node.

Это быстрый пример того, как это можно сделать в файле addon index.js:

var path = require('path');
var mergeTrees = require('broccoli-merge-trees');
var Funnel = require('broccoli-funnel');

module.exports = {
  name: 'my-addon',

  treeForVendor: function(tree) {
    var packagePath = path.dirname(require.resolve('node-package'));
    var packageTree = new Funnel(this.treeGenerator(packagePath), {
      srcDir: '/',
      destDir: 'node-package'
    });
    return mergeTrees([tree, packageTree]);
  },

  included: function(app) {
    this._super.included(app);

    if (app.import) {
      this.importDependencies(app);
    }
  },

  importDependencies: function(app) {
    app.import('vendor/node-package/index.js');
  }
};

Аналогичная техника может использоваться для стандартных приложений. Опять же, этот метод будет вскоре заменен, поскольку команда Ember CLI добавит поддержку модулей Node, поэтому старайтесь использовать ее экономно и постоянно обновляйте Ember CLI!

Ответ 3

Начиная с Ember-CLI 2.15.0, теперь вы можете импортировать модули node. Чтобы продемонстрировать, убедитесь, что ваше приложение находится на Ember-CLI 2.15.0, затем попробуйте установить Moment.js:

  • yarn add moment
  • Добавьте app.import('node_modules/moment/moment.js') в ваш ember-cli-build.js файл.
  • Теперь вы можете получить доступ через объект window: window.moment.
  • (необязательно) Если вы хотите иметь возможность import moment from 'moment', вы можете создать прокладку поставщика. Подробнее см. эту ссылку.

Это не будет работать для модулей node, которые не предоставляют единый набор JavaScript (вам нужно будет расслоение с использованием методов, описанных в других комментариях), но это уже огромное улучшение.

Ответ 4

Вероятно, предпочтительный метод - это браузерный шум, но я взломал его, создав символическую ссылку в папке поставщика следующим образом:

$ npm install --save-dev css.escape
$ cd vendor
$ ln -s ../node_modules/css.escape/css.escape.js css.escape.js

затем

// ember-cli-build.js
app.import('vendor/css.escape.js');

Ответ 5

Обновите ember-cli до v2.15.0-beta.1. Новая версия позволяет использовать app.import с node_modules

Для получения дополнительной информации проверьте https://github.com/ember-cli/ember-cli/pull/7045