2017-01-15 4 views
5

Так что я использую webpack2 в проекте Angular2, который имеет несколько внешних зависимостей. Некоторые из этих зависимостей с помощью CommonJS и объявляют компоненты, как показано ниже:Как решить module.id должна быть строковая ошибка, используя webpack2

@Component({ 
    moduleId: module.id, 
    templateUrl: 'mycomponent.html' 
    ... 
}) 

Это вызывает ошибку ниже:

Error: moduleId should be a string in "MyComponent" 

После некоторых исследований, я выясняю, это связанно с Webpack ожидая компоненты, чтобы иметь id как число, в то время как Angular объявляет его как строку. Я не могу изменить код зависимостей. Что я могу сделать, чтобы жить с такой зависимостью?

Спасибо!

ответ

2

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

{ test: /.*node_modules\/my-dependency-folder\/.*\.js/, loader: 'string-replace-loader', query: { search: 'moduleId: module.id,', replace: '' } } 

Надеюсь, это поможет кому-то с той же проблемой.

0

Удалить линию

moduleId: module.id, 

Он работает.

+0

Сделать веб-пакет [решить относительные пути] (http://stackoverflow.com/questions/37178192/angular2-what-is-the-meanings-of-module-id-in-component) без идентификатора модуля? – Pavel

+0

Как я уже сказал, я не могу просто удалить все ссылки module.id из всех сторонних библиотек. Они тянутся через npm каждый раз. Каждый человек, который должен работать над проектом, должен будет это сделать. @pavel, да Webpack не нуждается в разрешении относительных путей. – Juliano

+0

Должен быть лучший способ решить эту проблему. Я попытался добавить правило, чтобы заменить все объявления module.id с помощью string-replace-loader. Тем не менее, он все еще не работает, поскольку шаблоны не ссылаются на каталог типа «./mytemplate.html», а просто объявляют «mytemplate.htnl». Последний не работает с Webpack – Juliano

0

Я не знаю, поможет ли это или нет, но, возможно, кому-то это понадобится (я сделал!).

Таким образом, в худшем случае можно искать module.idв .js файлов и добавить .toString() метод (module.id.toString()), он будет решать эту проблему.

Смежные вопросы