AngularJS分别RequireJS做文件合并压缩的那些坑
更新:HHH   时间:2023-1-7


小心!AngularJS合并RequireJS做文件离开压缩的那些坑

小心!AngularJS合并RequireJS做文件离开压缩的那些坑,各人正在做文件离开压缩的时辰一定要注意,感乐趣的网友可以参考一下
正在项目运用了AngularJS框架,用RequireJS做异步模块加载(AMD),正在做文件离开压缩时,遇到了一些坑,有些只是搞定了,但不大白原因。

那些坑
1. build.js内里的paths必须跟main.js内里的保持等同。

这个build.js便是r.js运用的设置文件,而main.js便是RequireJS的main文件。正在离开压缩时辰,build.js文件内里也必要写paths,并且仍是跟main.js同样,我很奇特为甚么就不克不及识别main内里的require.config的paths,以免离开的时辰还要将paths拷贝过来(我试过build.js内里没有paths,是不克不及离开的)。(-_-!!!)

2. 某些依赖库必要写整个绝关于门路才气做离开。

正在项目里, 我运用一个叫layer的第三方库(库因而requireJS define写的),一起头只做开拓时辰,正在paths设置了门路后,运用此库只必要用个简称(define依赖时辰)。 但正在做离开时辰,竟然提示文件不存正在(因为间接拿简称去拼文件地点了),无法之下只能修改这个库的运用办法,全数运用到这个库的都写整个绝关于门路,这个时辰开拓和做离开才没有错。

3. 离开以后可以运转,加之压缩就不行以。

这个是最缓和标题,最缓和标题,最缓和标题。正在文件离开压缩后,运用文件时辰,AngularJS运转就不个别了,老是报模块初始化得胜,Failed to instantiate module co妹妹on due to: Error: [$injector:unpr] Unknown provider: e,以下图。

很关头的一个点便是,不压缩可以用,一旦压缩了(用了默认的压缩),运用就会报错。以是斟酌一定某些工具被“压坏”了,网上某些文章都说是必要前面多么写AngularJS cntroller、directive等,运用的办事用字符串概念。

co妹妹onModule.controller( "broswerCtrl" ,["$scope" ,"$sce" , function ($scope,$sce){

不过我的整个运用便是多么概念,并无给它注入过失的时机。起初正在无法之下,就只能设置mangle: false,不混杂变量名,多么做后,离开压缩的文件就可以准确运用了!!!

PS:庞杂说法便是,离开压缩可以,变量名不克不及混杂(总觉得怪怪的),觉得标题暂时无解。

4. 第二层的require,做离开的时辰,是合其实不进来。

比喻正在mian.js内里多么加载模块,正在离开时辰会看见第二层的require并无被离开到。

require([ "CO妹妹ON"], function(){
  require([ "angular", "LOGIN" ], function(angular){
   //....
  });
});

这时分必要正在build.js加findNestedDependencies: true, 这时分才会离开第二层。

离开筹备

一、安放nodejs

文件离开压缩基于nodejs,以是先安放nodejs。

二、下载r.js

r.js独特requirejs模块写法关于文件举办离开,压缩。

庞杂设置

设置文件最佳写一个build.js,以下:


({
  baseUrl:"../",
  paths: {
   //...
  },
  shim: {
   //...
  },
  optimize: "uglify2",
  uglify2: {
  mangle: false //false 不混杂变量名
  },
  findNestedDependencies: true,
  name: "js/main",
  out: "../js/main-built.js"
})
此处就讲多少个关头属性:

baseUrl:整个的模块(般便是js)都绝关于付这个门路存正在。

optimize:优化剧本文件的方式,有前面5种取值方式。

uglify:(默认) 用UglifyJS压缩。

uglify2: 用UglifyJS2( 2.1.2+)压缩。

closure: 运用谷歌's Closure Compiler 庞杂优化情势压缩文件, 仅正在优化货色运用Java有用。

closure.keepLines:跟closure参数同样, 只可是保留换行符。

none: 不做压缩。
findNestedDependencies:探究require()内里的require或许define调用的依赖。

PS:设置属性另有不少,就纷歧细细说了。当文件设置好后,就实施号召离开压缩

node r.js -o build.js
总结

RequireJS模块的离开压缩仍是有点庞杂的,可是遇到AngularJS,正在压缩方面就有些标题了,今朝没找到甚么更好办法。

以上便是本文的详细内容,但愿关于各人的深造有所帮助。


返回开发技术教程...