Подтвердить что ты не робот

Как использовать файл blueimp-file-upload с webpack?

Я использую файл blueimp-file-upload на своем веб-сайте, и я использую webpack для упорядочивания кода js.

Я установил blueimp-file-upload и jquery.ui.widget из NPM

npm install --save blueimp-file-upload
npm install --save jquery.ui.widget

и мне нужно загрузить файл blueimp-file в мой файл записи

require('blueimp-file-upload')

но когда я запускаю webpack, я получаю ошибку:

ERROR in ./~/blueimp-file-upload/js/jquery.fileupload.js
Module not found: Error: Cannot resolve module 'jquery.ui.widget' in E:\app-parent\cooka-common-web\src\main\resources\static\node_modules\blueimp-file-upload\js
@ ./~/blueimp-file-upload/js/jquery.fileupload.js 19:8-22:19 
4b9b3361

Ответ 1

Отключите как AMD, так и CommonJS и используйте глобальный jQuery для браузера.

/* The jQuery UI widget factory, can be omitted if jQuery UI is already included */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/vendor/jquery.ui.widget.js');
/* The Iframe Transport is required for browsers without support for XHR file uploads */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/jquery.iframe-transport.js');
/* The basic File Upload plugin */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/jquery.fileupload.js');
/* The File Upload processing plugin */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/jquery.fileupload-process.js');
/* The File Upload validation plugin */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/jquery.fileupload-validate.js');
/* The File Upload Angular JS module */
require('imports?define=>false&exports=>false!blueimp-file-upload/js/jquery.fileupload-angular.js');

Это конфигурация, которую я использую для интеграции webpack, blueimp-fileupload с angular. В качестве альтернативы вы можете настроить в своем webpack.config.js как регулярное выражение, чтобы избежать повторных загрузчиков.

Ответ 2

Если вы работаете с изображениями:

Webpack жаловался на некоторые модули, которые не были в пакете загрузки blueimp-file. Вот как я получил эту работу:

Установка отсутствующих зависимостей:

npm i -S blueimp-load-image
npm i -S blueimp-canvas-to-blob

Настройка Webpack:

config.resolve = {
   extensions: ['', '.js'],
   alias: {
      'load-image': 'blueimp-load-image/js/load-image.js',
      'load-image-meta': 'blueimp-load-image/js/load-image-meta.js',
      'load-image-exif': 'blueimp-load-image/js/load-image-exif.js',
      'canvas-to-blob': 'blueimp-canvas-to-blob/js/canvas-to-blob.js',
      'jquery-ui/widget': 'blueimp-file-upload/js/vendor/jquery.ui.widget.js'
   }
};

Включите скрипты в ваше приложение:

import "blueimp-file-upload/js/vendor/jquery.ui.widget.js";
import "blueimp-file-upload/js/jquery.iframe-transport.js";
import "blueimp-file-upload/js/jquery.fileupload.js";
import "blueimp-file-upload/js/jquery.fileupload-image.js";

Ответ 3

resolve: {
    extensions: ['', '.js'],
    alias: {
        'jquery-ui/widget': 'blueimp-file-upload/js/vendor/jquery.ui.widget.js'
    }
}

Ответ 4

jquery.fileupload.js сначала проверяет наличие AMD, что приводит к этой ошибке. Вы можете научить webpack не использовать стиль AMD для этого файла. (Убедитесь, что для этого метода работает npm install imports-loader.):

require('imports?define=>false!blueimp-file-upload')

Он должен правильно зарегистрировать модуль как CommonJS и потребует jquery.ui.widget в нужном месте.

Подробнее здесь: http://webpack.github.io/docs/shimming-modules.html#disable-some-module-styles

Ответ 5

Вы можете добавить псевдоним в основной файл jquery.ui.widget - он, к сожалению, не указывает его в package.json, поэтому webpack не может найти его иначе.

resolve: {
    alias: {
        "jquery.ui.widget": "node_modules/jquery.ui.widget/jquery.ui.widget.js"
    }
},

Ответ 6

на самом деле вы можете решить эту проблему, изменив конфигурацию вашего веб-пакета, просто добавьте путь к решению (например, я использую беседу)

resolve: {
    extensions: [ '', '.js', '.jsx' ],
    modulesDirectories: [
       'node_modules',
       'bower_components', 
       'bower_components/blueimp-file-upload/js/vendor' 
    ]
}

Ответ 7

В webpack 3.x синтаксис будет выглядеть так:

  {
    test: require.resolve("blueimp-file-upload"),
    use: "imports-loader?define=>false"
  }