Javascript 如何在开发和生产中动态包含脚本

Javascript 如何在开发和生产中动态包含脚本,javascript,jquery,performance,development-environment,production-environment,Javascript,Jquery,Performance,Development Environment,Production Environment,我试图实现的伪代码: if(in dev environment){ //write unminified scripts to the head tag } else{ // in production // write the minified distribution script to the head } 选项1。) 在Chrome桌面浏览器中间歇工作,在Safari Mobile中间歇工作 function write_to_head (path ,js_file_sr

我试图实现的伪代码:

if(in dev environment){
   //write unminified scripts to the head tag
}
else{ // in production
  // write the minified distribution script to the head
}

选项1。) 在Chrome桌面浏览器中间歇工作,在Safari Mobile中间歇工作

function write_to_head (path ,js_file_src){
  var js_script = document.createElement('script');
  js_script.type = "text/javascript";
  js_script.src = path + js_file_src;
  document.getElementsByTagName('head')[0].appendChild(js_script);
}
选项2。) 在Chrome中100%工作,在Safari Mobile中间歇性工作。当async:false时似乎也能更好地工作,但这是一个否定,因为它可能会阻止用户交互

function load_script(path ,js_file_src){    
    $.ajax({
      async:true,     // false may block user interaction               
      type:'GET',
      url:path +""+ js_file_src,
      data:null,
      cache: true,
      success:_onsuccess,
      error: _onerror,
      dataType:'script'
    });   
} 根据我是在开发环境中还是在生产环境中,我调用以下函数之一

var dev_scripts = ["script1.js","script2.js","script3.js",........etc];
var prod_scripts = ["all-dist.min.js",........etc];

function load_dev(){
  for(var i=0;i<dev_scripts.length;i++){
     //  call write_to_head ("/api/path/",dev_scripts [i] );
     //  or  
     //  load_script("/api/path/",dev_scripts [i] );
  }
}


function load_prod(){
  for(var i=0;i<prod_scripts .length;i++){
     //  call write_to_head ("/api/path/",prod_scripts [i] );
     //  or  
     //  load_script("/api/path/",prod_scripts [i] );
  }
}
var dev_scripts=[“script1.js”、“script2.js”、“script3.js”、“等等];
var prod_scripts=[“all-dist.min.js”、……等];
函数加载_dev(){

对于(var i=0;i,根据您的约束条件和设计,可能有两个答案

好的-这是从客户端手动附加文件的规范方法,无需任何外部库。您正在复制“标记管理器”,这是一种为您管理这些列表的服务。BrightTag就是这样一个供应商的例子

更可取的做法是,假设(1)所有脚本与页面位于同一个域中(避免CORS问题),并且(2)它们可以异步加载,则可以使用类似于在依赖项中加载的内容

最佳实践要求您正确使用require.js,并按照规范设计所有模块

在开发案例中,您将使用这些文档中描述的
模式,该模式加载require.js库,然后加载根模块,然后在执行之前提取所有其他声明的依赖项

在生产环境中,您可以使用(r.js或类似工具)将文件编译成一个文件。该工具使用您选择的或来缩小和连接所有文件,就像您(显然)已经完成的那样


祝你好运!

require.js是否存在依赖项?我的应用程序将导出到war文件并部署在JBOSS服务器上。require.js是否需要Node.js?不,它是客户端标记,完全在浏览器中运行。只需将其附加到页面。require.js链接中的文档页面将解释如何执行所有这些操作。如果是,请接受你认为答案是正确的,请:)我忘了提到这个应用程序也使用angular。为了让requireJS工作,看起来我必须将我的js文件的上下文包装在一个define中,对吗?谢谢,伙计,我尝试了一些文件,看起来很有希望