我需要尽可能地混淆我的源代码所以我决定使用uglifyjs2 ..现在我有了嵌套目录的项目结构,如何通过uglifyjs2运行它来完成整个项目,而不是给它所有的输入文件?
我不介意它是否将整个项目缩小为单个文件或其他东西
在angularjs中,我们将参数作为依赖注入传递.例如,
function checkInCtrl ($scope, $rootScope, $location, $http){
…..
….
}
Run Code Online (Sandbox Code Playgroud)
所以当它变得糜烂时,就会变得像
function checkInCtrl(a,b,c,d){
}
Run Code Online (Sandbox Code Playgroud)
现在a,b,c,d将不会被解释为$ scope,$ rootScope,$ location,$ http分别由angular和整个代码无法工作.为此,angularjs提供了一种解决方案,即
checkInCtrl.$inject = ['$scope', '$rootScope', $location', '$http'];
Run Code Online (Sandbox Code Playgroud)
我们可以使用上面的语法注入不同的依赖项.这很好用,直到我没有使用一些自定义角度服务作为依赖.所以,例如,
如果我有类似的东西
function checkInCtrl ($scope, $rootScope, $location, $http){
…..
….
}
Run Code Online (Sandbox Code Playgroud)
它适用于给定的解决方案,但如果我有类似的东西
function checkInCtrl ($scope, $rootScope, $location, $http, customService){
…..
….
}
Run Code Online (Sandbox Code Playgroud)
customService就是这样的
angular.module(customService, ['ngResource'])
.factory('abc', function($resource) {
return $resource('/abc');
})
Run Code Online (Sandbox Code Playgroud)
它的缩小版本无法通过角度正确解释.
由于我们必须开始项目开发活动,我们无法花费足够的时间来研究问题,我们开始使用控制器而不缩小它们.所以第一个问题是角度是否存在这样的问题,或者我犯了一些错误,并且由于它不起作用?如果存在这样的问题,它的解决方案是什么?
我能够在我的Play Framework 2.3.1应用程序中加载sbt-uglify 1.0.3插件.加载非缩小的javascripts非常简单,但加载缩小版本似乎是不可能的.
在我的模板中,我使用<script>与此类似的标签:
<script src="@routes.Assets.at("javascripts/app.js")"></script>
Run Code Online (Sandbox Code Playgroud)
在开发模式下,加载了非缩小的javascript版本,这很好.在prod模式(使用activator start)中,我看到sbt-uglify为target/web/uglify/build文件夹生成缩小版本,但由于我没有更改<script>模板中的上述标记行,因此加载了非缩小版本的javascripts文件.
有没有办法对这些路由进行仅prod映射以加载缩小版本?
我在使用Grunt和grunt-ng-annotate时收到此警告.
警告中没有引用错误在文件中的位置,这使调试变得困难.
有任何想法吗?
我有一个用ES6语法编写的自定义模式模块,我包含在我的角度应用程序中,当我尝试构建-prod启用了标志的应用程序时,我遇到了问题(来自uglifyjs):
Unexpected token: punc ()
Run Code Online (Sandbox Code Playgroud)
这是一个使用angular-cli 1.7.4的角度5 app.
我的节点模块的条目文件如下:
const MyModule = require('./src/index.js');
const myModule = new MyModule();
module.exports = {
doStuff: myModule.doStuff,
doOtherStuff: myModule.doOtherStuff
}
Run Code Online (Sandbox Code Playgroud)
然后这需要进入我的一个ts文件,如下所示:
import MyModule = require('@acme/mymodule');
Run Code Online (Sandbox Code Playgroud)
运行ng serve任务时,我没有问题,可以按预期使用该应用程序.
它在尝试生产生产构建时,我看到了这个问题.
在./src/index.js文件中,定义了许多使用const\let\async\await的函数.
阅读,我相信这是由我使用ES6和源角度cli执行构建步骤时与uglifyjs不兼容的源.
从我也读过,webpack配置可以从angular-cli配置控制,至少不在1.x中,否则我会尝试其中一个插件来帮助我解决这个问题.
我假设我需要在它遇到angular-cli之前通过额外的步骤运行代码,例如,使用babel来转换我的es6代码.
我正在努力寻找如何与angular和cli相关的示例,我可以找到如何使用babel并且能够在我的一个节点模块源上测试它并且可以看到这个生成的es5版本.
我实际上有4个节点模块,其中一些需要彼此,所以我想确保它们在被转换后仍然可以相互要求.
顺便说一句,不知道它有多相关,但在我的polyfills.ts文件中启用了以下polyfill:
import "core-js/es5";
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';
Run Code Online (Sandbox Code Playgroud)
我感谢您提供的任何建议!
谢谢
UPDATE
我已经制作了一个最小的Angular 5应用程序,它使用了1.x的angular-cli.我已在此复制了构建行为,这也会从UglifyJS生成错误. …
我正在将开发团队从Chirpy转移到视觉工作室的附加组件,用于组合和缩小CSS/JS文件,作为工作流程自动化过程的一部分.
在chirpy中,配置看起来像这样(为简洁而截断):
<FileGroup Name="scripts.combined.js" Minify="both">
<File Path="forms.js" Minify="false" />
<File Path="cookie_monster.js" Minify="true" />
...
</FileGroup>
Run Code Online (Sandbox Code Playgroud)
所以在这个删节的情况下,我有2个文件.一个需要缩小,另一个不需要.(根据这里的人,缩小forms.js打破功能,我还没有分配时间来修复它).
在grunt,我需要对此列表中的某些文件运行缩小任务,但不在其他文件上运行.然后我需要concat对所有文件(缩小或其他)运行任务.
鉴于uglifyJS需要一个dest集合来输出缩小的文件,我只需将其设置为类似的东西temp.min.js,在我的concat任务中,使用此文件来构建我的scripts.combined.js文件[由缩小和未缩小的文件组成],并使用grunt clean来删除该temp.min.js文件?
有一个更好的方法吗?
[编辑补充]我也担心潜在的加载顺序冲突.当前工具配置为"组合所有这些文件",每个文件上都有一个标志,指示是否应缩小它.我不确定如何使用grunt复制此工作流程
当gulp-ugily我尝试使用我的角度应用程序时,它正在破坏,即使我正在运行它gulp-ngmin.
这是gulp文件:
var gulp = require('gulp'),
concat = require('gulp-concat'),
ngmin = require('gulp-ngmin'),
uglify = require('gulp-uglify');
gulp.task('compress', function() {
gulp.src('client/js/source/*.js')
.pipe(concat('app.js'))
.pipe(ngmin())
.pipe(uglify())
.pipe(gulp.dest('client/js'));
});
Run Code Online (Sandbox Code Playgroud) 我目前有这个factor-bundle命令,我用它来捆绑我的文件,并将所有常见的东西拉到一个公共文件中:
browserify index.js bar-charts.js list-filter.js dashboard.js
-p [ factor-bundle -o ../../static/js/index.js -o ../../static/js/bar-chart.js -o ../../static/js/list-filter.js -o ../../static/js/dashboard.js ]
-o ../../static/js/common.js
Run Code Online (Sandbox Code Playgroud)
我以前也使用此命令来uglify单个文件:
browserify index.js | uglifyjs > ../../static/js/index.min.js
Run Code Online (Sandbox Code Playgroud)
如何在同一个命令中将文件与文件组合在一起factor-bundle并将其缩小uglifyjs?
(如果效果更好,我也可以使用两个命令.我只想最终得到缩小和组合的文件!)
鉴于丑化在这个过程中涉及一些缩小,同时做minify和uglify仍然有意义吗?如果是的话,首先应该缩小还是丑化?只做uglify就足够了吗?如果两者都完成,代码会更加混淆吗?
我正在使用grunt-contrib-uglify插件grunt 0.4.
我有以下任务:
uglify: {
dist: {
options: {
sourceMap: 'dist/sm/sm.js'
},
files: grunt.file.expandMapping(['*.js'], 'dist/js', {
cwd: 'dist/js'
})
}
},
Run Code Online (Sandbox Code Playgroud)
如您所见,uglify配置为压缩多个文件,并且只指定了一个源映射.(我无法找到指定多个源图输出的方法).
此外,uglify在压缩每个js文件后覆盖了源图.
如何配置此插件以输出所有js文件的完整源映射?
uglifyjs ×10
javascript ×6
gruntjs ×4
angularjs ×2
ecmascript-6 ×2
minify ×2
obfuscation ×2
angular ×1
angular-cli ×1
browserify ×1
gulp ×1
ng-annotate ×1
node.js ×1
sbt ×1
uglifyjs2 ×1
webpack ×1