我已将自动生成器依赖关系从0.18.10更新为0.20.3。
我已将已弃用的this.dest
更新为this.destinationRoot()
在获取项目的基本路径时,我现在遇到了生成器问题,因此我可以将文件从一个位置复制到另一个位置。 我创建了一个将路径放在一起的函数,然后传递给另一个函数,该函数排除了一些文件被复制过来。
这是我用
获取错误的函数// Copy Bower files to another directory
var copyBowerFiles = function (component, to, exclude) {
var base = this.destinationRoot(),
publicDir = base + '/' + this.publicDir,
publicAssetsDir = publicDir + '/assets',
bowerComponentsDir = publicAssetsDir + '/bower_components',
bower,
from;
to = (base + '/' + to || publicAssetsDir);
from = bowerComponentsDir + '/' + component;
//this.dest.copy(from, to);
this.bulkDirectory(from, copyDestPathPartial.call(this, to, exclude));
};
在最后一个函数中调用它:
end: function () {
this.installDependencies({
callback: function () {
copyBowerFiles.call('jam', this.publicDir, excludeJamFiles);
}.bind(this)
});
}
我收到错误消息:
var base = this.destinationRoot(),
^
TypeError: undefined is not a function
我也尝试过sourceRoot()
我想更新我的生成器以使用最新版本的生成器。任何帮助实现这项工作都会很棒。
在调用函数时,你还需要传递this
作为第一个参数吗?
修改 这是copyDestPathPartial函数
// Copy destination path partial
var copyDestPathPartial = function (to, exclude) {
exclude = exclude || [];
return function (abs, root, sub, file) {
if (!_.contains(exclude, file) && ! _.contains(exclude, sub)) {
this.copy(abs, to + '/' + (sub || '') + '/' + file);
}
}.bind(this.destinationRoot());
};
当我在copyBowerFiles函数中使用this
时,我收到另一条错误消息,当我调用此函数时会显示:
throw new TypeError('Arguments to path.resolve must be strings');
copyDestPathPartial
函数是否未输出字符串?
答案 0 :(得分:0)
这只是一个JavaScript错误,120.9
内的this
不是您认为的。
根据您编写的代码,copyBowerFiles
等于this
。
所以在这里你需要:jam
。因为要调用的第一个参数是copyBowerFiles.call(this, 'jam', this.publicDir, excludeJamFiles);
值。请参阅文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
话虽如此,分配随机this
值非常脏并且难以维护。为什么不将this
作为原型方法?