把JS和CSS合并到1个文件

本文介绍了一种将JavaScript和CSS合并为单一文件的方法,通过利用注释符<!--的不同解析方式来减少HTTP请求,提高网页加载速度。该方法适用于某些浏览器,但在Chrome中可能因解析机制不同而出现问题。

合并JS文件和CSS文件很多人都知道,也用过,目的是为了减少请求数。但有时候我们觉的把JS合并到1个文件,CSS又合并到另外1个文件也是浪费,我们如何能把CSS和JS一起合并进1个文件了?

这里需要使用1个常见的注释符<!-- 主要是利用css,js解析器对<!-- 进行不同的解析来实现JS和CSS合并的。

   1. CSS解析器 会忽略<!--符号,
   2. JS解析器会把<!--当作注释符号,与// 注释相同。

看看下面的列子:   
 <HEAD>
  <TITLE>test</TITLE>
  <style type="text/css">
   <!--.d{color:red;}
  </style>
  <script>
    <!-- function showMsg(m){alert(m);}
  </script>
 </HEAD>
 <BODY>
   <div class='d'>颜色变成红色</div>
   <input type="button" value="不会弹出" onclick="showMsg('js');" />
 </BODY>
  
运行上面的代码,会发现CSS是正常的,而JS确失效了,因为上面的代码等价于: 
  <style type="text/css">
   .d{color:red;}
  </style>
  <script>
    // function showMsg(m){alert(m);}
  </script>

利用这个特性,我们就可以实现把js和CSS合并到1个文件中:
  
  test.jscss 文件
  <!-- /* 
   function showMsg(m){
    alert(m);
  }
  <!-- */ 

  <!-- .d{color:red;} 

index.html
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
    <title>test</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <script type="text/javascript" language="javascript"  src="test.jscss"></script>
    <link rel="stylesheet" rev="stylesheet" type="text/css" href="test.jscss" />
  </head>
 <body>
   <div class='d'>颜色变成红色</div>
   <input type="button" value="不会弹出" onclick="showMsg('js');" />
 </body>
</html>

 上面代码的JS和CSS都能正常运行,虽然test.jscss被链接了2次,但因为缓存的原因,其实只会下载一次。

    注:上面代码中chrome中运行有问题,这是因为chrome中下载同1个文件之后只解析一次,比如你先用<script 加载了test.jscss,chrome就会使用js解析器来解析test.jscss,而当你再用link加载test.jscss文件的时候,chrome会直接把用js解析器解析后文件传递给link,而不会使用css解析器再解析一次,这就导致上面的代码只有js生效,而css无效,如果把link标签放在前面,则js会失效。目前还没找到很好的解决版本,虽然可以在第二次加载的时候在url后带1个参数解决,但这样又变成2次请求了。希望有知道的朋友指点下。

转自:http://www.blogjava.net/BearRui/archive/2010/04/18/combin_css_js.html
### 合并多个 CSS 文件合并多个 CSS 文件一个文件,可以通过以下方法实现: 1. **手动合并**:将多个 CSS 文件的内容复制粘贴到一个单独的 CSS 文件中。需要注意确保样式表的顺序正确,避免样式被覆盖或冲突。手动合并适用于小型项目或简单的网站[^1]。 2. **使用构建工具**: - **Webpack**:通过配置 `webpack`,可以将多个 CSS 文件合并一个文件。可以使用 `mini-css-extract-plugin` 插件来提取 CSS 到单独的文件中。 ```javascript const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'] } ] }, plugins: [ new MiniCssExtractPlugin({ filename: 'styles.css' }) ] }; ``` - **Gulp**:通过 `gulp-concat` 插件可以将多个 CSS 文件合并一个文件。 ```javascript const gulp = require('gulp'); const concat = require('gulp-concat'); gulp.task('concat-css', function() { return gulp.src(['./css/file1.css', './css/file2.css']) .pipe(concat('styles.css')) .pipe(gulp.dest('./dist')); }); ``` 3. **使用在线工具**:可以使用在线工具如 [CSS Merge](https://www.cssmerge.com/) 来合并多个 CSS 文件。 ### 合并多个 JavaScript 文件 合并多个 JavaScript 文件的方法与 CSS 类似: 1. **手动合并**:将多个 JavaScript 文件的内容复制粘贴到一个单独的 JavaScript 文件中。需要注意确保脚本的执行顺序正确,避免依赖问题。 2. **使用构建工具**: - **Webpack**:通过配置 `webpack`,可以将多个 JavaScript 文件合并一个文件。 ```javascript module.exports = { entry: { main: './src/index.js', vendor: './src/vendor.js' }, output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } }; ``` - **Gulp**:通过 `gulp-concat` 插件可以将多个 JavaScript 文件合并一个文件。 ```javascript const gulp = require('gulp'); const concat = require('gulp-concat'); gulp.task('concat-js', function() { return gulp.src(['./js/file1.js', './js/file2.js']) .pipe(concat('scripts.js')) .pipe(gulp.dest('./dist')); }); ``` 3. **使用在线工具**:可以使用在线工具如 [JS Merge](https://www.jsmerge.com/) 来合并多个 JavaScript 文件。 ### 注意事项 - **加载顺序**:确保合并后的文件不会影响样式或脚本的加载顺序,尤其是在依赖其他文件的情况下。 - **缓存优化**:合并后的文件可以通过浏览器缓存减少加载时间,但需要合理设置缓存策略。 - **代码分割**:对于大型项目,可以考虑使用代码分割技术(如 Webpack 的动态导入),以减少初始加载时间。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值