в чем смысл двойника!в исходном коде style-loader? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь понять, как style-loader работает?В исходном коде style-loader есть фрагмент кода о горячей замене модуля.

var hmr = [
    // Hot Module Replacement,
    "if(module.hot) {",
    // When the styles change, update the <style> tags
    "   module.hot.accept(" + loaderUtils.stringifyRequest(this, "!!" + request) + ", function() {",
    "       var newContent = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");",
    "",
    ...
]

Мой вопрос касается !! в коде.в чем смысл?и как webpack справиться с этим?Я проверил документ webpack, но не нашел объяснения.

Я отлаживаю код, когда параметр request равен

"/Users/leon/Documents/localCode/style-loader-test/node_modules/_css-loader@1.0.1@css-loader/index.js!/Users/leon/Documents/localCode/style-loader-test/index.css"

,

loaderUtils.stringifyRequest(this, "!!" + request)

возвращает:

"!!./node_modules/_css-loader@1.0.1@css-loader/index.js!./index.css"

loaderUtils.stringifyRequest используется для чередования абсолютного пути, поэтому результат легко понять.

После этого веб-пакетразбери код дальше.И наконец, следующий код генерируется в выходном коде:

module.hot.accept(/*! !./node_modules/_css-loader@1.0.1@css-loader!./index.css */ "./node_modules/_css-loader@1.0.1@css-loader/index.js!./index.css", function() {
    var newContent = __webpack_require__(/*! !./node_modules/_css-loader@1.0.1@css-loader!./index.css */ "./node_modules/_css-loader@1.0.1@css-loader/index.js!./index.css");
    ...
}

!! исчез в выходном коде, но я не знаю, что происходит, и каково значение !!?Кто-нибудь может помочь объяснить?

...