Это немного, но мне нужен пример кода, чтобы проиллюстрировать мое замешательство. После этого меня интересует ответ на следующее:
- Как использовать
require('module')
вместоrequire('../../src/module')
илиrequire('./module')
? - Как повторно использовать
./index.js
вspec/specs.js
без дублирования работы? (И предотвращение запускаsrc/app.js
как модуля ввода).
Я уже начал несколько проектов на основе браузера и люблю browserify и хрюкать. Но каждый проект умирает в той же точке моей кривой развития/обучения. Как только я добавлю тестирование в микс и вы должны управлять двумя 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
) и выполняет код для объединения всех необходимых модулей. - Использует прокси-браузер для псевдонима
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
вspec/specs.js
без дублирования работы? (И предотвращение запускаsrc/app.js
как модуля ввода).