Jos*_*ack 7 javascript commonjs reactjs
我正在查看Facebook的React的源代码,并发现在整个项目源中,他们没有指定加载自己的模块的相对路径.例如,代替var foo = require('../bar/foobar')使用库var foo = require('foobar'),就好像模块已经加载,node_modules以便CommonJS读取.
我只是想知道他们是如何做到这一点的?我尝试通过Grunt查看他们的构建步骤,但看不到任何直接完成此任务的软件包.
Bri*_*and 11
React使用一个名为commoner的工具.它们的配置匹配如下所示的行:
* @providesModule ReactChildReconciler
Run Code Online (Sandbox Code Playgroud)
要require('ReactChildReconciler')电话.他们还将所有内容放在一个目录中,因此路径最终为require('./ReactChildReconciler').
源代码以结构化的方式组织,但模块名称对于repo是全局唯一的(以及facebook的所有内部代码,我认为 [引证需要]).这意味着它所指出的内容并不含糊.
关于这个主题,反应代码中还有其他一些神奇的东西.
通过删除第一个之后的参数来节省空间,从而为生产构建转换对调用invariant(assertion, explanation, ...)和类似warning调用的调用.警告调用完全被剥离,因为它们被包裹在下一个魔法中:开发仅阻止.
if (__DEV__) {
...
}
Run Code Online (Sandbox Code Playgroud)
编译为:
if (process.env.NODE_ENV !== 'production') {
...
}
Run Code Online (Sandbox Code Playgroud)
其中,通过envify,编译(在开发中),代码运行:
if ('development' !== 'production') {
...
}
Run Code Online (Sandbox Code Playgroud)
这在生产中:
if ('production' !== 'production') {
...
}
Run Code Online (Sandbox Code Playgroud)
哪个缩小到这个:
?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |