這有點長,但我需要代碼示例來說明我的困惑。這之後,我很感興趣的答案如下:如何在多個grunt-browserify軟件包中管理相對路徑別名?
- 我如何使用
require('module')
代替require('../../src/module')
或require('./module')
? - 如何重複使用
./index.js
spec/specs.js
而不重複工作? (並防止src/app.js
由於它是入口模塊而運行)。
我已經開始了幾個基於瀏覽器的項目,並且愛着browserify和grunt。但是每個項目都會在我的開發/學習曲線中死去。一旦我將測試添加到組合中並且必須管理兩個browserify捆綁包(app.js
和spec/specs.js
),整個系統就會崩潰。我將解釋:
我用grunt-browserify,並設置我的初始目錄:
.
├── Gruntfile.js
├── index.js (generated via grunt-browserify) [1]
├── lib
│ ├── jquery
│ │ └── jquery.js [2]
│ └── jquery-ui
│ └── jquery-ui.js [3]
├── spec
│ ├── specs.js (generated via grunt-browserify) [4]
│ └── src
│ ├── spec_helper.js (entry)
│ └── module_spec.js (entry)
└── src
├── app.js (entry)
└── module.js
- 使用一個條目文件(
src/app.js
),並做了代碼走捆綁所有需要模塊。 - 使用browserify-shim別名
jquery
。 - 只是別名
jquery-ui
沒有墊片(需要你後var $ = require('jquery')
)。 - 將
spec/src
中的所有幫助程序和規格文件用作輸入模塊。
我會通過我的配置步驟:
browserify: {
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var MyModule = require('./module'); // <-- relative path required?!
快樂
現在添加的jQuery:
browserify: {
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'index.js': ['src/app.js']
}
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
快樂
現在添加規格:
options: {
shim: {
jquery: {
path: 'lib/jquery/jquery.js',
exports: '$'
}
},
noParse: ['lib/**/*.js'],
alias: [
'lib/jquery-ui/jquery-ui.js:jquery-ui'
]
},
dist: {
files: {
'app.js': 'src/app.js'
}
},
spec: {
files: {
'spec/specs.js': ['spec/src/**/*helper.js', 'spec/src/**/*spec.js']
}
}
// in app.js
var $ = require('jquery');
require('jquery-ui');
var MyModule = require('./module');
// in spec/src/module_spec.js
describe("MyModule", function() {
var MyModule = require('../../src/module'); // <-- This looks like butt!!!
});
悲傷
總結:我如何...
- 使用
require('module')
而不是require('../../src/module')
或require('./module')
? - 重用
./index.js
inspec/specs.js
沒有重複的工作? (並防止src/app.js
由於它是入口模塊而運行)。
'spec/index.js'與'spec/specs,js'是一個錯字。編輯的問題。謝謝你的回答。似乎真相是原始的(舊版本)沒有被設計來做這個設置。我認爲更好的問題是*應該如何組織這樣的項目?許多教程不捆綁生產腳本和測試腳本。添加testem之類的東西,難怪人們會感到困惑。我們需要一個元指南,將所有這些軟件包和諧地整合在一起。 – Sukima
根本問題可能是JS生態系統的多樣性。它還很年輕。也許有一天重複的軟件包/實用程序將停止共存,其中一個將成爲解決X事務的默認資源。現在,談到JS時,至少有2/3不同的庫在做同樣的事情。所以對於像構建系統這樣的東西來說,特別難以完全不可知,並且對於所有可能的庫組合來說都很好。 –
這是'aliasMappings'選項特定於'grunt-browserify'還是它是一個'browserify'隱藏選項的包裝?我試圖用['opts.basedir'](https://github.com/substack/node-browserify#var-b--browserifyfiles-or-opts)選項獲得相同的行爲,但沒有運氣。 – eightyfive