2017-09-22 4 views
1

어딘가에서 실수를 저 지르지 만 최적화 중에는 표준 출력에 쓰여지지 않습니다. requirejs를 통해 파일을 최적화하려고하지만 출력이 축소되지 않습니다. documentation에 따르면 UglifyJS는 코드를 축소해야합니다.RequireJS : Uglification Not Working

어쨌든 다음 코드는 간단하지만 문제를 격리합니다.

SRC /하는 index.js :

require(['config'], function() { 
    require(['myMod'], function (myMod) { 
     console.log(myMod.x()); 
    }) 
}) 

SRC/myMod.js :

define(function() { 
    let myMod = { 
     x: 5 
    }; 

    return myMod; 
}) 

SRC/config.js :

define(function() { 
    require.config({ 
     baseUrl: 'src' 
    }); 
}) 

그리고 여기가있는 꿀꺽 작업입니다 최적화 수행 :

gulp.task('optimize', function (cb) { 
    let config = { 
     appDir: 'src', 
     dir: 'dist/src', 
     generateSourceMaps: true, 
     preserveLicenseComments: false, 
     removeCombined: true, 
     baseUrl: './', 
     modules: [{ 
      name: 'index', 
      include: ['myMod'] 
     }] 
    } 

    let success = function (buildResponse) { console.log(buildResponse); cb() }, 
     error = function (err) { console.log(err); cb(err) } 

    rjs.optimize(config, success, error) 
}) 

작업을 실행 한 후 dist/src/index.js에 포함 된 다른 모듈이 모두 있습니다. 그러나, 그것은 축소되지 않았으며 변수의 이름도 바뀌지 않았습니다. 대신 파일이 연결된 것뿐입니다. 누군가가 저에게 (1) 왜 그것이 축소되지 않았는가를 말할 수 있습니까? (2) UglifyJS가 오류를 던지고 있습니까? 그렇다면 꿀꺽 꿀꺽 거리기 작업을 실행할 때 볼 수있는 방법이 있습니까?

EDIT 위의 gulp 작업에서 수행되는 노드에서 옵티 마이저 사용에 관해 이야기하는 RequireJS 문서 링크가 있습니다. 하단의 "최적화 모듈을 노드 모듈로 사용"아래에 있습니다.

http://requirejs.org/docs/node.html

답변

1

RequireJS '최적화 UglifyJS2 번들. UglifyJS2는 ES6 이상을 처리하지 않습니다. 나는 당신이 당신의 gulpfile에서 사용하는 옵션을 가지고,이 명령은 내가 options.js 이름을 별도의 파일로를 쿵하는 소리, 그리고 실행하면 : 당신으로

Tracing dependencies for: index 
Uglify file: /tmp/t33/dist/src/index.js 
Error: Cannot uglify file: /tmp/t33/dist/src/index.js. Skipping it. Error is: 
SyntaxError: Unexpected token: name (myMod) 

If the source uses ES2015 or later syntax, please pass "optimize: 'none'" to r.js and use an ES2015+ compatible minifier after running r.js. The included UglifyJS only understands ES5 or earlier syntax. 

index.js 
---------------- 
config.js 
index.js 
myMod.js 

: 다음

$ ./node_modules/.bin/r.js -o options.js 

을 나는이 출력을 얻을 UglifyJS가 파일을 축소하지 못하고 RequireJS가 해당 파일의 축소 단계를 건너 뜁니다. 이것은 철저한 오류가 아니기 때문에, 파일은 여전히 ​​출력되고, 단지 축소되지 않습니다.

letvar으로 변경하면 myMod.js이 표시되며 문제가 사라집니다. 이것이 실행 실패하지 않기 때문에

불행하게도, (r.js 여전히, 그냥 파일을 작게를하지 않습니다 실행) 오류는 사용자가 rjs.optimize에 전달하는 errback 핸들러에 신호되지 않습니다. Gulpfile에서 이러한 오류를 잡을 수있는 방법이 없습니다. 안전한 작업은 optimize: "none"으로 설정하고 rjs.optimize을 실행 한 후 추가 빌드 단계로 축소를 수행하는 것입니다.

+0

정말 고마워요! 나는 이것이 내가 실수를 한 것은 처음이 아니라고 말하기 엔 당혹 스럽다. (그것이 최후의 희망이다! – Andrew