2014-04-11 32 views
11

在版本的grunt-browserify 2.0.2,browserify-shim從模塊本身移出並轉化爲被用作transform,而不是一個簡單的optiongrunt-browserify任務。困難得到browserify-墊片與咕嚕-browserify(> 2.0.2)工作作爲變換

版本使用的墊片與grunt-browserify會看起來像這樣的:

'libs-dev': { 
    src: [path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js')], 
    dest: path.join('<%= config.dirs.dest.dev %>', 'js', 'libs.js'), 
    options: { 
     shim: { 
      angular: { 
       path: path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js'), 
       exports: 'angular' 
      } 
     } 
    } 
} 

這偉大的工作,併產生圍繞libs.js模塊的包裝這樣:

require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({"angular":[function(require,module,exports){ 
    module.exports=require('i10PRm'); 
},{}],"i10PRm":[function(require,module,exports){ 
    (function(global){(function browserifyShim(module, exports, define, browserify_shim__define__module__export__) { 
     browserify_shim__define__module__export__(typeof angular != "undefined" ? angular : window.angular); 
    }).call(global, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; }); 
})(window) 
},{}]},{},["i10PRm"]); 

然而,基於(令人難以置信的稀疏和令人沮喪的)文檔,使用grunt-browserify內墊片的新版本被用作一個transform,因爲這樣的:

'libs-dev': { 
    src: [path.join('<%= config.dirs.browserLibs %>', 'angular', 'angular.js')], 
    dest: path.join('<%= config.dirs.dest.dev %>', 'js', 'libs.js'), 
    options: { 
     transform: ['browserify-shim'] 
    } 
} 

,而且由於browserify-shim的配置現在完全基於package.json配置,我package.json看起來這樣:

"browser": { 
    "angular": "./bower_components/angular/angular.js" 
}, 
"browserify-shim": { 
    "angular": "angular" 
} 

然而,這會產生一個包裝,看起來像:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 
    (function (global){ 
     __browserify_shim_require__=require;(function browserifyShim(module, exports, require, define, browserify_shim__define__module__export__) { 
      browserify_shim__define__module__export__(typeof angular != "undefined" ? angular : window.angular); 
    }).call(global, undefined, undefined, undefined, undefined, function defineExport(ex) { module.exports = ex; }); 
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 
},{}]},{},[1]); 

正如你所看到的,這個新包裝中缺少了一些東西;似乎沒有與舊包裝中分配的i10PRm導出值等效。據推測,這意味着我以某種方式錯誤地使用了導出,儘管我遵循browserify-shim文檔,並且它看起來相當簡單。

想要獲得最新版本的grunt-browserify>= 2.0.2)和browserify-shim的任何幫助或清晰度,以及如何正確使用它們。

回答

16

只是爲了後代的更新:我最終放棄了grunt-browserify,並在命令行中使用browserify-shimbrowserify。它可以立即運行,完全沒有問題。

我來的信念,三個庫(browserifygrunt-browserifybrowserify-shim)的組合都被簡單地更新和改變太快,以致能夠依賴,因爲他們正在更新他們一起工作。開槽grunt組件使剩下的兩個組件更容易管理。

的browserify-墊片seems to agree創建者:

...在我的經驗,每當人們包裹browserify和browserify-墊片(這兩者都是在完美的package.json配置)一個任務運行裏面,他們正在讓他們的生活變得更加困難。

+38

Upvoting運行browserify任務。我發誓,JS工具就像現在的狂野西部。每個人都在向前推進,在兩個陣營之間形成對抗,鬼城已經存在,人們被拋在後面,沒有人會停下來,直到他們到達海岸,然後就沒有別的地方可去了。 –

10

我這個設置太掙扎,但我設法得到它完全從我的Gruntfile.js取出墊圈的設置,讓browserify處理它們在package.json工作。在這裏我使用的墊片與jquery,你還可以看到版本我在下面運行:

// portion of package.json 

"browser": { 
    "jquery": "./js/lib/jquery-1.11.0.min.js" 
}, 
"browserify-shim": { 
    "jquery": "$" 
}, 
"browserify": { 
    "transform": [ 
     "browserify-shim" 
    ] 
}, 
"devDependencies": { 
    "grunt": "~0.4.1", 
    "grunt-cli": "~0.1.10", 
    "browserify": "~3.44.2", 
    "browserify-shim": "~3.4.1", 
    "grunt-browserify": "~2.0.8" 
} 

Gruntfile.js的相關部分,現在看起來是這樣的:

// portion of Gruntfile.js 

browserify: { 
    bundleOptions: { 
     debug: true 
    }, 
    src: 'js/src/main.js', 
    dest: 'js/output.js' 
}, 

grunt:browserify現在作爲預計通過撥打browserify,但允許它自己處理browserify-shim

+1

「完全從我的Gruntfile.js中刪除墊片設置,並讓browserify在package.json中處理它們」是關鍵! – shao

+0

也將所有轉換移至package.json – shao

0

Donot通過grunt watch運行browserify,這不會反映您在中間所做的更改。

所以不是每次更改package.json文件,相關的grunt broswerify

相關問題