Grunt-browserify внешние библиотеки дают: Не могу найти модуль
Я работаю над приложением с Backbone Marionette и создаю свои файлы с помощью grunt-browserify 3.8.
Backbone, Marionette, underscore и jQuery добавляются с помощью npm. Я собираю все мои файлы в один файл. Все работало нормально, но сборка была очень медленной (примерно 1,5 минуты), поэтому я прочитал об использовании external
опция конфигурации в grunt-browserify. Сейчас сборка довольно быстрая, но когда я получаю доступ к странице, я получаю:Uncaught Error: Cannot find module 'underscore'
на линию, когда я впервые использую функцию require
Я читаю везде, но я не могу понять правильную конфигурацию для grunt-brwoserify.
Вот мой GruntFile:
'use strict';
module.exports = function (grunt) {
require('grunt-config-dir')(grunt, {
configDir: require('path').resolve('tasks')
});
require('jit-grunt')(grunt);
// show elapsed time at the end
require('time-grunt')(grunt);
grunt.registerTask('i18n', [ 'clean', 'dustjs', 'clean:tmp' ] ); // not used for now
grunt.registerTask('build', ['i18n', 'less', 'cssmin', 'browserify', 'concurrent:build'] );
grunt.registerTask('serve', [ 'build', 'concurrent:server'] ); // Build & run the server locally, for development.
};
Вот моя задача Browserify:
'use strict';
module.exports = function browserify(grunt) {
// Load task
grunt.loadNpmTasks('grunt-browserify');
// Options
return {
build: {
files: {
'.build/js/theme-smarty.js': ['public/js/assets/smarty-themeApp/plugin/jquery.min.js', 'public/js/assets/smarty-themeApp/**/*.js'],
'.build/js/app-bundled.js': ['public/js/app.js'],
'.build/js/landing-page.js': ['public/js/landing-page.js']
// '.build/js/app-admin-bundled.js': ['public/js/app-admin.js']
},
options: {
// activate watchify
watch: true,
watchifyOptions: {
spawn: false
},
include: [
'public/js/**/*.js'
],
transform: [['babelify', {'presets': 'es2015', 'compact': false}]],
external: [
'backbone',
'underscore',
'jquery',
'backbone.marionette'
]
}
}
};
};
И вот мои первые взгляды, где мне нужны библиотеки:
'use strict';
const
_ = require('underscore'),
$ = require('jquery'),
Backbone = require('backbone'),
Marionette = require('backbone.marionette'),
MainRouter = require('./main-router'),
MainController = require('./main-controller');
Backbone.$ = $;
let View = Marionette.LayoutView.extend({
template: require('./main-page.dust'),
regions: {
mainContainer: '.main-container',
modalContainer: '.modal-container'
},
initialize: function () {
this.model = new Backbone.Model({
page: this.$el.data('page')
});
new MainRouter({
controller: new MainController({
mainContainer: this.mainContainer,
modalContainer: this.modalContainer
})
});
},
onRender: function () {
Backbone.history.start({pushState: true});
}
});
module.exports = View;
Похоже, что библиотеки даже не скомпилированы в моем app-bundled.js
файлы. Какой лучший / правильный способ их компилировать? Лучше всего иметь два отдельных файла? libs и приложение? Можно ли сделать только один файл, используя libs из npm?