在将javascript文件合并为一个文件之前,我应该知道什么?

在将javascript文件合并为一个文件之前,我应该知道什么?,javascript,gruntjs,zurb-foundation,concat,Javascript,Gruntjs,Zurb Foundation,Concat,所以我正在学习使用grunt来连接,如果它达到了这一点,请缩小/丑化我的各种js脚本,以减少HTTP请求 然而,我怀疑这并不像简单地选择要连接的文件并期望它工作那样容易。大多数JavaScript在我合并之后工作,但是,特别是基础部分失败了。对于那些不知道的,基金会是一个前端框架,并通过调用它来初始化: $(document.foundation() 错误日志显示: TypeError: $(...).foundation is not a function $(document

所以我正在学习使用grunt来连接,如果它达到了这一点,请缩小/丑化我的各种js脚本,以减少HTTP请求

然而,我怀疑这并不像简单地选择要连接的文件并期望它工作那样容易。大多数JavaScript在我合并之后工作,但是,特别是基础部分失败了。对于那些不知道的,基金会是一个前端框架,并通过调用它来初始化:
$(document.foundation()

错误日志显示:

    TypeError: $(...).foundation is not a function
    $(document).foundation();
在任何情况下,我都想知道是什么让一些javascript在合并时工作,以及为什么其他javascript不能工作。这与它们合并的顺序有关吗? 此外,在使用缩小/压缩和连接之前,我还应该了解编写javascript的哪些知识? 我自己才刚刚开始学习使用名称空间,在这方面我已经看到了提到的名称空间。但我找不到关于它们的重要性的来源,也找不到在我的案例中如何准确地使用它们的来源

如果有人对我的Grunfile文件的外观感兴趣,请看:

    module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
  options: {
    separator: ';'
  },
  dist: {
    src: [
        'bower_components/foundation/js/vendor/jquery.js',
        'bower_components/foundation/js/vendor/modernizr.js',
        'javascripts/vendor/quickform.js',
        'javascripts/vendor/jquery.dataTables.min.js',
        'javascripts/dataTables/dataTables.foundation.js',
        'javascripts/vendor/jstz.min.js',
        'bower_components/foundation/js/vendor/fastclick.js',
        'bower_components/foundation/js/foundation.js">',
    ],
    dest: 'dist/<%= pkg.name %>.js'
  }
},
uglify: {
  options: {
    banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
  },
  dist: {
    files: {
      'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
    }
  }
}
});

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-concat');
  // Default task(s).
  grunt.registerTask('default', ['concat','uglify']);
};
module.exports=函数(grunt){
//项目配置。
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
康卡特:{
选项:{
分隔符:';'
},
地区:{
src:[
'bower_components/foundation/js/vendor/jquery.js',
'bower_components/foundation/js/vendor/modernizer.js',
'javascripts/vendor/quickform.js',
'javascripts/vendor/jquery.dataTables.min.js',
JavaScript /数据表/数据表
'javascripts/vendor/jstz.min.js',
'bower_components/foundation/js/vendor/fastclick.js',
“bower_components/foundation/js/foundation.js”>,
],
dest:'dist/.js'
}
},
丑陋的:{
选项:{
横幅:'/*!*/\n'
},
地区:{
档案:{
'dist/.min.js':['']
}
}
}
});
//加载提供“丑”任务的插件。
grunt.loadNpmTasks(“grunt-contrib-uglify”);
grunt.loadNpmTasks(“grunt-contrib-concat”);
//默认任务。
registerTask('default',['concat','uglify']);
};

非常感谢您的帮助:)

合并它们的顺序在大多数情况下都很重要。例如,假设您有两个小JS文件。一个包含
var a=“hi”
,另一个包含
alert(a)
。如果您按顺序合并它们,一切都会正常工作,并且会出现一个包含“hi”的警报框“会出现的。但是如果您以另一种方式合并它们,它将警告未定义,因为尚未定义。通常,定义变量和函数的JS应该放在第一位。

这就是我能给你的全部帮助。我希望这对您有所帮助。

您是否尝试添加“;”在每个js文件的末尾(或开头),我添加了“;”但这没有帮助。另外,我刚刚注意到其他一些文件也不起作用。给我一个$1的参考错误)订单确实重要2)您不需要添加“;”在所有文件中,separator param将为您处理此问题3)您确定找到了所有文件吗?->grunt——concat任务配置中的verbose或add nonull:true参数。我添加了verbose参数,一切看起来都很好。没有错误。我还在创建的文件中看到了代码。只是有些事情出了大问题。我唯一没有受过教育的猜测可能是某些代码与某些内容冲突。但这就是为什么我想知道在开始处理文件之前我应该知道什么。如何避免冲突等?我在哪里能找到这些东西?