Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Rails中的所有JS代码编译成一个匿名函数_Javascript_Ruby On Rails - Fatal编程技术网

Javascript 将Rails中的所有JS代码编译成一个匿名函数

Javascript 将Rails中的所有JS代码编译成一个匿名函数,javascript,ruby-on-rails,Javascript,Ruby On Rails,我有一个具有以下JavaScript文件结构的rails应用程序: - assests/javascripts - /application - module1.js . . . - moduleN.js - application.js 每个文件如下所示: var module1 = (function(){ //Lots of code return { //Public stuff

我有一个具有以下JavaScript文件结构的rails应用程序:

- assests/javascripts
  - /application
    - module1.js
        .
        .
        .
    - moduleN.js
  - application.js
每个文件如下所示:

var module1 = (function(){

    //Lots of code

    return {
        //Public stuff
    }

})();
模块需要相互访问,因此需要公开一些内容

application.js

//= require_tree ./application
//= require ./begin.js
//= require_tree ./application
//= require ./end.js
//= require_self
//= require_tree ./application

App = {};
App.FirstModule = (function () {
  //blah blah

  return {
    //public methods
  }
})();
我想知道是否有办法将所有代码编译成匿名函数;比如:

(function(){
//= require_tree ./application
})();
这显然不起作用。我目前正在做的是:

application.js

//= require_tree ./application
//= require ./begin.js
//= require_tree ./application
//= require ./end.js
//= require_self
//= require_tree ./application

App = {};
App.FirstModule = (function () {
  //blah blah

  return {
    //public methods
  }
})();
begin.js只是
(function(){
end.js
})

不是最简单的解决方案


这不仅消除了全局变量,而且允许编译器将它们的名称更改为较短的名称,以获得更轻的代码和更不可读的代码。我关心代码的机密性,不想公开模块名称,从而使逆向工程更加困难。

使用全局名称空间

application.js

//= require_tree ./application
//= require ./begin.js
//= require_tree ./application
//= require ./end.js
//= require_self
//= require_tree ./application

App = {};
App.FirstModule = (function () {
  //blah blah

  return {
    //public methods
  }
})();
require\u self
在这里很重要,因为默认情况下,链轮将此文件的内容放在底部

应用程序/first_module.js

//= require_tree ./application
//= require ./begin.js
//= require_tree ./application
//= require ./end.js
//= require_self
//= require_tree ./application

App = {};
App.FirstModule = (function () {
  //blah blah

  return {
    //public methods
  }
})();

你试图做的是滥用匿名函数,这有点违背了目的。如果您需要在两个模块之间共享私有变量,那么它们应该是一个模块。如果模块太大而无法维护,则需要将其拆分为具有公共接口的单独模块

这不是结束,这是一个匿名函数对吧,谢谢。我改变了问题。这里有一个未被提及的要求,就是为什么从
窗口
无法访问中的代码是如此重要。我认为你们需要对此进行扩展,因为我从未见过少数全局名称空间会成为问题的情况。但那个么应用程序将属于Windows,而不是自包含的。i、 e.应用程序(及其所有模块)可以从控制台访问,对吗?“你需要将其分解为具有公共接口的单独模块”这正是我所做的,问题是我a)希望将它们放在单独的文件中,b)不希望它们是全局的。是的,会的。在大多数情况下,这很好。我主要关心的是代码保密性和避免逆向工程。暴露模块名称对我来说是个问题。我想我还是按照原来的方式去做。听起来你好像忘了
require\u self