Javascript 将节点模块添加到ember CLI应用程序
我想在我的Ember CLI应用程序中使用这个Node.js模块 如何使其可用于Ember应用程序 我尝试将其添加到Javascript 将节点模块添加到ember CLI应用程序,javascript,node.js,ember.js,npm,ember-cli,Javascript,Node.js,Ember.js,Npm,Ember Cli,我想在我的Ember CLI应用程序中使用这个Node.js模块 如何使其可用于Ember应用程序 我尝试将其添加到Brocfile.js app.import('node_modules/remarkable-regexp/index.js'); 但它是这样失败的: 路径或模式“node_modules/regexp/index.js”未找到 匹配任何文件 由于卓越的regexp是一个npm模块,我认为将其与ember cli集成的最佳方法是使用 在您的ember cli应用程序中,您可以通
Brocfile.js
app.import('node_modules/remarkable-regexp/index.js');
但它是这样失败的:
路径或模式“node_modules/regexp/index.js”未找到
匹配任何文件
由于
卓越的regexp
是一个npm模块,我认为将其与ember cli集成的最佳方法是使用
在您的ember cli应用程序中,您可以通过运行npm install--save dev ember browserify来安装插件
因此,您可以使用ES6Import导入模块,方法是在模块前面加上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>
从“npm:卓越”导入卓越;
从“npm:Exceptive regexp”导入插件;
var plugin=插件(
//要匹配的regexp
/@(\w+/,
//当某些内容匹配时,将调用此函数
功能(匹配、UTIL){
var url='1〕http://example.org/u/“+匹配[1]
返回“”
}
)
新的
.使用(插件)
.render(“hello@user”)
//打印出:
//你好
browserify noise可能是首选方法,但我在vendor文件夹中创建了一个符号链接,如下所示:
$ npm install --save-dev css.escape
$ cd vendor
$ ln -s ../node_modules/css.escape/css.escape.js css.escape.js
然后
ember-browserify
是在应用程序中使用的一个很好的选择,可以尝试允许ember-CLI导入NPM包,而无需任何额外的帮助
但是,如果您试图在插件和应用程序中实现这一点,您可以采取稍微不同的方法,即手动修改西兰花构建链以包含您的节点包
这是一个如何在插件的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团队增加了对节点模块的支持,这个方法就会被取代,所以请尽量少用它,并与Ember CLI保持同步 将您的ember cli更新为v2.15.0-beta.1
。新版本允许您使用app.import
和node\u模块
有关更多信息,请查看自Ember CLI 2.15.0起的,您现在可以。为了演示,请确保您的应用程序位于Ember CLI 2.15.0上,然后尝试安装Moment.js:
纱线添加力矩
将app.import('node_modules/moment/moment.js')
添加到ember cli build.js
文件中
现在,您可以通过窗口
对象:窗口访问力矩。力矩
(可选)如果希望能够从“力矩”导入力矩,可以生成供应商垫片。有关详细信息,请参阅
这对于不提供单个JavaScript捆绑包的节点模块不起作用(您需要使用其他注释中描述的方法进行捆绑),但这已经是一个巨大的改进。您是通过npm install--save dev regexp
安装模块的吗?这非常有效,谢谢。我只担心所有browserify
s依赖项在文件大小和处理时间方面带来的开销。@Hedge browserify本身是一个相当大的项目,但使用ember browserify,构建输出只长四行。以下是添加到您的应用程序中的内容:这对我来说很有用,因为我需要在加载项中导入npm模块。但开始看到此错误:BrockolimergeTrees:预期的Brockoli节点,未定义inputNodes[0]这是因为树
参数有一个未定义的
值,导致合并树
中出现异常。我更改的代码:`var nodes=[packageTree];if(tree){nodes.unshift(tree);}返回合并树(nodes)`只要您不需要支持缺少对符号链接(例如Windows)的可靠支持的文件系统,并且您如何将其导入component.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');
}
};