sprockets //=require 和 browserify-rails require() 之间的区别?

Difference between sprockets //=require and browserify-rails require()?

带链轮:

//= require 

...在 application.js 中似乎在我的 HTML 的头部添加了一个 <script src=...> 标签。但是,browserify-rails:

window.mymodule = require('mymodule'); // mymodule is a dependency in package.json 

我没有看到 mymodule<script> 标签。但是我能够使用 mymodule 中定义的代码。 browserify 在这里做什么?

简而言之,Browserify 将每个模块包装在一个函数中,为模块提供了自己的作用域。这使您不导出的内容对模块保密。这些功能中的每一个都存储在地图中,以便稍后可以在 require 上查找它们。

这是一篇很好的文章,从较高的层次解释了它是如何工作的:http://benclinkinbeard.com/posts/how-browserify-works/

Sprockets 只在全局范围内包含清单中的所有内容。在开发中,每个脚本的文件都包含在内。在生产中,脚本全部连接并缩小,但都是全局的。