2013-04-17 25 views
5

Tôi đang cố gắng sử dụng cả hai UnderscoreUnderscore.string với RequireJS.Gạch dưới.string với RequireJS

Nội dung main.js:

require.config({ 
    paths: { 
     'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min', 
     'underscore-string': '//cdnjs.cloudflare.com/ajax/libs/underscore.string/2.3.0/underscore.string.min', 
    }, 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     'underscore-string': { 
      deps: ['underscore'], 
      exports: '_s' 
     }, 
    } 
}); 

var modules = ['underscore-string']; 

require(modules, function() { 
    // -- 
}); 

trình duyệt thấy _, nhưng không thấy _s - đó là không xác định.

Lý tưởng nhất là tôi muốn có dấu gạch dưới dưới _ và gạch dưới.string dưới _.str, nhưng __s cũng được. Làm thế nào tôi có thể làm điều đó?

phiên bản: RequireJS 2.1.5, dấu gạch dưới 1.4.4, 2.3.0 Underscore.string

Lưu ý: Nhờ @jgillich chắc chắn, rằng con đường có hai dấu gạch chéo (//cdnjs.cloudfare.com/...), nếu không thì trình duyệt sẽ nghĩ rằng URL có liên quan đến máy chủ và Firebug sẽ ném:

Error: Script error 
http://requirejs.org/docs/errors.html#scripterror 
+0

Tôi nghĩ rằng vấn đề là requirejs giả định các đường dẫn có liên quan đến thư mục máy chủ của bạn. 'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min', 'gạch dưới-chuỗi': '//cdnjs.cloudflare.com/ajax/libs/underscore .string/2.3.0/underscore.string.min ' – jgillich

+0

có thể trùng lặp của [Làm thế nào để mixin Underscore plugins trong RequireJS?] (http://stackoverflow.com/questions/13627376/how-to-mixin-underscore-plugins- in-requirejs) – Louis

Trả lời

10

Tôi đã tìm thấy lỗi. Vì lý do nào đó, RequireJS không hoạt động với phiên bản của Underscore.string từ cdnjs.com, vì vậy tôi đã thay thế nó bằng Github version. Tôi đoán nó có liên quan đến commit 9df4736.

Hiện nay mã của tôi trông giống như sau:

require.config({ 
    paths: { 
     'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min', 
     'underscore-string': '//raw.github.com/epeli/underscore.string/master/dist/underscore.string.min', 
    }, 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     'underscore-string': { 
      deps: ['underscore'], 
     }, 
    } 
}); 

var modules = ['underscore', 'underscore-string']; 

require(modules, function(_) { 
    // -- 
}); 

Underscore.string nằm trong _.str.

Chỉnh sửa: Kể từ ngày 16 tháng 7 năm 2013, phiên bản CDNJS là updated with the upstream.

1

hoạt động cho CHỈ của tôi nếu tôi sử dụng chính xác "underscore.string" tên mô-đun trong chế độ hiển thị. Dường như liên quan đến tên hardcoded trong underscore.string tự

Miễn underscore.string mã nguồn (chi nhánh này được thực thi khi yêu cầu sử dụng):

// Register as a named module with AMD. 
    if (typeof define === 'function' && define.amd) 
    define('underscore.string', [], function(){ return _s; }); 

Vì vậy, đối với tôi cấu hình chỉ làm việc là:

require.config({ 
    paths: { 
     'underscore': '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min', 
     'underscore.string': '//raw.github.com/epeli/underscore.string/master/dist/underscore.string.min', 
    }, 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     'underscore.string': { 
      deps: ['underscore'], 
     }, 
    } 
}); 

var modules = ['underscore', 'underscore.string']; 

require(modules, function(_) { 
    // -- 
}); 
1

Dưới đây là một mã số lao động sử dụng Requirejs "trật tự" plugin, cũng bao gồm jQuery, và tải tất cả mọi thứ mà không cần bất kỳ mâu thuẫn:

requirejs.config({ 
    baseUrl: "assets", 
    paths: { 
     order: '//requirejs.org/docs/release/1.0.5/minified/order', 
     jquery: 'http://code.jquery.com/jquery-2.1.0.min', 
     underscore: '//underscorejs.org/underscore-min', 
     underscorestring: '//raw.githubusercontent.com/epeli/underscore.string/master/dist/underscore.string.min', 
     underscoremixed: 'js/underscore.mixed' // Create separate file 
    }, 
    shim: { 
     underscore: { exports: '_' }, 
     underscorestring: { deps: ['underscore'] } 
    } 
}); 
require(['order!jquery','order!underscoremixed'], function($,_) { 
    // test 
    console.log(_.capitalize('capitalized text')); 
}); 

Bên js/underscore.mixed.js đặt sau

...
define(['underscore','underscorestring'], function() { 
    _.mixin(_.str.exports()); 
    return _; 
}); 

Cheers! :)

2

Battling với điều này trong nhiều giờ trước khi tôi hiểu những gì tôi đang làm sai

Đây là những gì tôi đã làm sai

Bạn không nên đổi tên các tập tin dấu gạch dưới.chuỗi trong main.js

mặc dù trong thư viện của tôi, tôi đã làm đổi tên file trong đường dẫn tôi đặt tên cho nó trở lại 'underscore.string'

Đây là cách bạn main.js nên trông giống như

require.config({ 
paths: { 
    underscore: 'lib/underscore', 
    'underscore.string' : 'lib/_string' , 
}, 
shim: { 
    underscore: { 
     exports: '_', 
     deps: [ 'jquery', 'jqueryui' ] 
    }, 
    'underscore.string': { 
     deps: [ 'underscore' ] 
    }, 
} 
.... 

bạn có thể sau đó, hoặc thêm nó như phụ thuộc với trong shim của bạn như tôi đã làm cho tập tin mixin tôi

shim: { 
    mixin : { 
     deps: [ 'jquery', 'underscore', 'underscore.string' , 'bootstrap' ] 
    }, 

Hoặc chỉ cần xác định nó trong các trang khác nhau của bạn như

/*global define */ 
define([  
    'underscore.string' 
], function () { 

nó chỉ làm việc bây giờ bạn có thể truy cập nó thông qua _.str hoặc _.string

Đây là lý do tại sao bạn nên làm điều đó đây chiều và không cố gắng để đặt tên cho nó cái gì khác

trên đường dây 663 của underscore.string.js

// Register as a named module with AMD. 
    if (typeof define === 'function' && define.amd) 
    define('underscore.string', [], function(){ return _s; }); 

Điều đó có nghĩa là nó sẽ chỉ đăng ký nó với AMD yêu cầu JS nếu bạn định nghĩa 'underscore.string'

+1

WOW cảm ơn bạn! CÁi này đã sửa nó giúp tôi! – Kayvar

Các vấn đề liên quan