我正在经历一种非常奇怪的行为,甚至无法说出应该归咎于哪个包。
我的设置:RequireJS项目包含JSXTransformer和jsx!
插件
我有一个像这样的es6类:
define([
'react'
], function(
React
) {
class MyComponent extends React.Component {
myMethod() {
otherObject.someMethod()._privateProp; // Yes, we need this accessing and have no influence on it
}
}
return MyComponent;
});
运行r.js后生成的包中的转换输出是:
define('jsx!project/components/InputOutput',[
'react'
], function(
React
) {
var ____Class8=React.Component;for(var ____Class8____Key in ____Class8){if(____Class8.hasOwnProperty(____Class8____Key)){MyComponent[____Class8____Key]=____Class8[____Class8____Key];}}var ____SuperProtoOf____Class8=____Class8===null?null:____Class8.prototype;MyComponent.prototype=Object.create(____SuperProtoOf____Class8);MyComponent.prototype.constructor=MyComponent;MyComponent.__superConstructor__=____Class8;function MyComponent(){"use strict";if(____Class8!==null){____Class8.apply(this,arguments);}}
MyComponent.prototype.myMethod=function() {"use strict";
otherObject.someMethod().$MyComponent_privateProp;
};
return MyComponent;
});
注意otherObject.someMethod().$MyComponent_privateProp;
是如何写在那里的。这显然会中断,因为它不是MyComponent实例的属性。
答案 0 :(得分:4)
将/** @preventMunge */
添加到文件顶部。见this GitHub issue:
是的,对不起,这是一个非标准的fb-ism。现在,您可以通过将
/** @preventMunge */
放在文件的顶部来解决此问题并关闭此功能 - 但这也是一个相当大的fb-ism。我们应该(a)将其转换为转换选项(而不是直接的docblock指令)和(b)使其选择加入而不是选择退出(因为它是非标准的)。对于上下文:我们在每个模块的基础上处理所有欠前缀对象属性,部分原因是我们的欠前缀约定适用于对象和类。另外,即使我们想要放松对象与类的区别,也不可能告诉(在一般情况下)属性是否是对
this
的引用,因为别名变量可能发生(即{{1 }})。