Задача
Пакет "sass" содержит модуль, sass.dart.js: https://runpkg.com/?sass@1.21.0/sass.dart.js
Среди прочего, он содержит динамическое использование require
(много строк отредактировано):
var self = Object.create(global);
self.require = require;
//...
u($,"N0","Hq",function(){return self.require("readline")})
u($,"Mr","cN",function(){return self.require("fs")})
u($,"MN","Ho",function(){return self.require("chokidar")})
Такое использование require предотвращает статический анализ с помощью веб-пакета, что приводит к ошибке в выходных данных (также в этой сущности) и к созданию веб-пакета EmptyContext в пакете. Это естественно не работает:)
Опции опробованы
Я видел ContextReplacementPlugin
, я не думаю, что это применимо здесь, поскольку использование не является прямым вызовом по требованию.
Я видел noParse
, но похоже на ядерный подход, и я не знаю, какими могут быть потенциальные негативные побочные эффекты.
Код репродукции
Также в этот гист
index.js:
const sass = require("sass");
console.log(sass);
webpack.config.js:
module.exports = (env) => ({
entry: "./index.js",
mode: "development",
target: "node"
});
package.json:
{
"devDependencies": {
"webpack": "^4.34.0",
"webpack-cli": "^3.3.4"
},
"dependencies": {
"sass": "^1.21.0"
},
"scripts": {
"build": "webpack-cli"
}
}
Цель
Как я могу сконфигурировать контекст для этого конкретного модуля, чтобы конкретно перечислять readline
/ fs
/ chokidar
как зависимости, возможно, чтобы создать некоторый контекст, который предоставляет только эти значения?
Я не против, если решение немного хрупкое и потребует закрепления версии dart-sass.