添加节点模块以embeddedCLI应用程序

我想在我的Ember-CLI应用程序中使用这个Node.js模块https://www.npmjs.com/package/remarkable-regexp 。

我如何使它可用于Ember应用程序?

我试过把它添加到Brocfile.js

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

但它失败了,如下所示:

path或模式“node_modules / remarkable-regexp / index.js”不匹配任何文件

由于remarkable-regexp是一个NPM模块,我相信最好的方法来整合它与烬气是通过使用ember-browserify 。

在您的ember-cli应用程序中,您可以通过运行npm install --save-dev ember-browserify来安装插件npm install --save-dev ember-browserify

所以,你可以通过在npm:加上前缀来导入使用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> 

ember-browserify是在应用程序中使用的绝佳select,并且正在尝试使Ember CLI导入NPM包,而无需任何额外的帮助。

然而,如果你想在插件和应用程序中使用这个工具,你可以采取一些稍微不同的方法,即手动修改broccoli构build链来包含你的Node包。

这是如何在插件的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模块的支持的时候会被replace掉,所以请尽量less用,并且跟上Ember CLI!

browserify噪声可能是首选的方法,但我通过在供应商文件夹中创build一个符号链接来绕过它,如下所示:

 $ 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'); 

从Ember-CLI 2.15.0开始,您现在可以直接导入节点模块 。 为了演示,请确保您的应用程序位于Ember-CLI 2.15.0上,然后尝试安装Moment.js:

  1. yarn add moment
  2. app.import('node_modules/moment/moment.js')到您的ember-cli-build.js文件中。
  3. 您现在可以通过window对象window.moment
  4. (可选)如果你想能够import moment from 'moment' ,你可以生成一个供应商垫片。 详细信息请参阅此链接 。

这对于不提供单个JavaScript包的节点模块不起作用(您将需要使用其他注释中描述的方法进行绑定),但这已经是一个巨大的改进。

将您的ember-cli更新到v2.15.0-beta.1 。 新版本允许您使用app.importnode_modules

有关更多信息,请查看https://github.com/ember-cli/ember-cli/pull/7045