#javascript #webpack #webpack-4
#javascript #webpack #webpack-4
Вопрос:
Я поддерживаю модуль npm, который используется в node и браузере, как с webpack, так и без него. Я хочу добавить дополнительную функцию, которая опирается на собственный модуль, не нарушая или не требуя изменений от наших пользователей webpack.
Собственный модуль является необязательным
"optionalDependencies": {
"feature-module": "^1.0.0",
}
Я требую этого в try / catch
module.export = function doThing() {
try {
require('feature-module');
} catch (err) {
// fallack without feature
}
}
Это очень похоже на пример в документации package.json .
Он работает нормально вне webpack и даже в webpack, когда дополнительные зависимости не установлены.
Однако, когда установлен дополнительный модуль, webpack пытается запросить его и выдает ошибки, потому что у него нет загрузчика для файлов, которые он находит.
ERROR in ./node_modules/my-package/node_modules/feature-module/build/Release/feature-module.node 1:0
Module parse failed: Unexpected character '' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)
@ ./node_modules/my-package/node_modules/feature-module/index.js
@ ./node_modules/my-package/index.js
Комментарии:
1. Является ли добавление загрузчика опцией?
2. Браузеры не смогут загружать или запускать собственный модуль. Я бы также предпочел не требовать изменений от всех потребителей.
Ответ №1:
Вы можете описать это в своем package.json
{
...
"browser": { "feature-module": false },
...
}
Вот как я исправил такую проблему для txml. (github/txml/package.json).
Комментарии:
1. У вас есть исходный код? Это использование не соответствует npmjs.org документация docs.npmjs.com/cli/v6/configuring-npm/package-json#browser
2. Я думаю, что речь идет не столько о npm, сколько о bunders. github.com/webpack/webpack/issues/4674 кажется, поле браузера описано независимым, и webpack следует этому определению. аналогично browserify и rollup. Правило webpack
exclude
также может работать, но я не использовал его раньше.