2016-06-22 4 views
1

Есть ли способ предотвратить процесс сборки WebPack после сбоя после того, как компилятор скриптов начнет кричать по нерешенным переменным, которые на самом деле уже настроены в конфигурации ProvidePlugin в webpack?Как предотвратить прерывание работы скрипта в Webpack на неразрешенных переменных, объявленных в WebPack's ProvidePlugin?

webpack.config.js

plugins: [ 
... 
new webpack.ProvidePlugin({ 
      $: "jquery", 
      jQuery: "jquery", 
      "window.jQuery": "jquery", 
      "_": "underscore", 
      "underscore": "underscore" 
      //'process.env.NODE_ENV': '"development"' 
     }), 

] 

tsconfig.json

{ 
    "compilerOptions": { 


    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false, 
    "suppressImplicitAnyIndexErrors": true, 
    "declaration": false 
    }, 
    "exclude": [ 
    "node_modules", 
    "typings/main", 
    "typings/main.d.ts" 
    ] 
} 

https://webpack.github.io/docs/list-of-plugins.html#provideplugin

Из моего опыта, машинопись не знает о том, какие переменные будут закачиваться в модуль, и в результате сборка не завершена.

Это выход сборки

ERROR in ./src/file1.component.ts 
(77,9): error TS2304: Cannot find name '$'. 

ERROR in ./src/file2.component.ts 
(78,13): error TS2304: Cannot find name '$'. 

ERROR in ./src/file3.ts 
(155,15): error TS2304: Cannot find name 'jQuery'. 

ERROR in ./src/file4.ts 
(108,9): error TS2304: Cannot find name '$'. 

ответ

0

Если я понимаю правильно ProvidePlugin вам все еще нужно объявили JQuery и подчеркивания в качестве модулей (внешнеположенности или псевдоним).

Поэтому я бы рекомендовал, чтобы загрузить эти модули в машинопись с:

import * as $ from 'jquery'; 
import * as _ from 'underscore'; 

Тогда вам просто необходимо, чтобы обеспечить определение (.d.ts) файлы для этих библиотек. Для этого я рекомендую typings.

typings install jquery --global 
typings install underscore --global 

Я предполагаю, что вы используете ts-loader, который автоматически обрабатывал бы это.

Если вы хотите избежать заявлений import, вы все равно можете объявить эти библиотеки с определениями из типизирования.

Или вы можете создать свою собственную упрощенную декларацию:

declare var jQuery: any; 
declare var $: any;