2013-01-17 13 views
5

Mam skrypt budujący, który uruchamia cały mój kod przez uglifyjs, robi grono fantazyjnych rzeczy do przechwytywania i ostatecznie uruchamia eval(code) na niektórych plikach JavaScript.Uzyskiwanie map źródłowych pracujących z ocenionym kodem

Próbuję uruchomić cały ten proces za pomocą source maps, ale nie mogę sprawić, by działał tak długo, jak długo używam eval. Jeśli link do plików bezpośrednio przy użyciu <script src="..."> działa dobrze.

W moim kodu eval, mam:

code, blah blah blah 
//@ sourceMappingURL=/cache/618a67795c7460184bd9b99020cbb9fd.map 

a następnie w tym pliku .map, mam:

{ 
     "version" : 3 
    , "file"  : "618a67795c7460184bd9b99020cbb9fd.map" 
    , "sources" : ["/js/Parallax-JS/js/parallax-2.js"] 
    , "names" : [ 
      "a" 
     , "bunch" 
     , "of" 
     , "variable" 
     , "names" 
    ] 
    , "mappings" : "... LONG MAP ..." 
} 

Próbowałem oddanie //@ sourceURL= na końcu zamiast, i że w najmniej podaje mi poprawną nazwę pliku, ale nadal nie ma czytelnego źródła.

Wszelkie pomysły? Testowanie w Chrome 25 (dev) i 26 (kanarek)

Odpowiedz

-1

Tutaj jest konfiguracja za pomocą Grunt skompilować JavaScript do jednego pliku za pomocą zeszpecić z mapy źródłowej

package.json

"src": { 
    "js": "src/js" 
}, 
"dest": { 
    "js": "bin/js" 
} 

Gruntfile. js

grunt.initConfig({ 
    /** 
    * Loading in the package file to read source and destination directories 
    */ 
    pkg: grunt.file.readJSON('package.json'), 
    uglify: { 
    options: { 
     banner: '/* all.min.js <%= grunt.template.today("dd-mm-yyyy") %> */\n', 
     sourceMap: '<%= pkg.dest.js %>/all.min.js.map', 
     sourceMappingURL: 'all.min.js.map', 
     sourceMapRoot: '../../', 
     mangle: false 
     /*mangle: { 
      except: ['jQuery'] 
     }*/ 
    }, 
    js: { 
     src: [ 
      '<%= pkg.src.js %>/**/*.js' 
     ], 
     dest: '<%= pkg.dest.js %>/all.min.js' 
    } 
    } 
}; 

grunt.loadNpmTasks('grunt-contrib-uglify'); 
grunt.registerTask('min', ['uglify']); 

który tworzy następujące pliki:

all.min js

/* all.min.js 04-10-2013 */ 
angular.module("App",[]) 
//# sourceMappingURL=all.min.js.map 

all.min.js.map

{"version":3,"file":"bin/js/all.min.js","sources":["src/js/App.js"],"names":["angular","module"],"mappings":"AAeAA,QAAQC","sourceRoot":"../../"} 
5

miałem podobny problem, a rozwiązanie wydaje się za pomocą włączonych SourceMaps (DataURL z SourceMap).

Oto przykład:

eval("blah blah\n//@ sourceMappingURL=data:application/json;base64,...");

Wydaje się, że nie może odwoływać się do zasobów zewnętrznych z eval.

Myślę, że musisz również użyć sourcesContent, aby wstawić kod źródłowy do SourceMap.

Testowane przy użyciu Chrome 32.

+0

Nadal jestem nieco zdezorientowany. Czy możesz podać działające jsfiddle tego? Dzięki – AjaxLeung

+0

To nie działa dla mnie. Czy była to spekulacyjna odpowiedź, czy też sprawdziłeś, czy to działa? –

Powiązane problemy