Сконфигурируйте определенные модули для сборки, как требуется для пересылки
Я занимаюсь разработкой серверного приложения node.js и создаю пакет, используя webpack 2 со следующей конфигурацией:
{
entry: [
'./api/server.js'
],
target: 'node',
devtool: 'source-map',
context: path.resolve(__dirname, '..'),
output: {
path: path.resolve(__dirname, '..', 'build', 'server'),
filename: 'server.js'
},
resolve: {
modules: ['node_modules'],
extensions: ['.js']
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: [
['es2015', { modules: false }],
'stage-0'
],
plugins: [
'transform-object-rest-spread',
'babel-plugin-transform-decorators-legacy',
'transform-class-properties'
]
}
},
{
test: /\.json$/,
loader: 'json-loader'
}
]
}
}
Одна из моих зависимостей - библиотека node-argon2, и я импортирую эту библиотеку в server.js
, Полученный в результате пакетный файл, созданный webpack, включает в себя код argon2 (например):
,
/* 62 */
/* unknown exports provided */
/* all exports used */
/*!*MYPROJECT/~/argon2/index.js ***!!*\
/***/ function(module, exports, __webpack_require__) {
"use strict";
eval("'use strict'\nconst crypto....
В этом случае я получаю следующую ошибку:
(node:23259) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Path must be a string. Received undefined
(node:23259) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Я воспроизвожу вышеупомянутую ошибку с минимальным server.js
это только импортирует модуль argon2. Думая, что это может иметь отношение к тому факту, что библиотека argon2 вызывает собственный код, я пометил модуль как внешний и заменил его запись в встроенном файле веб-пакета следующим образом:
/***/ },
/* 163 */
/* unknown exports provided */
/* all exports used */
/*!*************************!*\
!*** external "argon2" ***!
\*************************/
/***/ function(module, exports) {
eval("module.exports = require(\"argon2\");");
Теперь это работает без каких-либо ошибок. Ясно, что маркировка этого внешнего элемента не является правильной (и не будет работать вообще без вышеуказанной модификации). Я ищу, чтобы настроить модуль argon2, чтобы привести к записи, аналогичной приведенной выше. Я заметил, что это соответствует пути string_decoder
, tty
, zlip
и некоторые другие модули определены в комплекте:
/***/ },
/* 164 */
/* unknown exports provided */
/* all exports used */
/*!*********************************!*\
!*** external "string_decoder" ***!
\*********************************/
/***/ function(module, exports) {
eval("module.exports = require(\"string_decoder\");...")
/***/ },
/* 165 */
/* unknown exports provided */
/* all exports used */
/*!**********************!*\
!*** external "tty" ***!
\**********************/
/***/ function(module, exports) {
eval("module.exports = require(\"tty\");