#node.js #webpack #compilation #global-object
Вопрос:
Я использую webpack-cli 4.7.0. У меня есть библиотека, которую я хотел бы скомпилировать для двух разных сред, одной для Интернета и одной для узла. Согласно этой документации, это легко достигается при экспорте двух отдельных допустимых конфигураций веб-пакетов из webpack.config.js.
Поэтому я создал две допустимые конфигурации webpack, одну для сервера и одну для клиента. Webpack выводит два отдельных файла, как указано, но настаивает на использовании «self» вместо «this», хотя я output.globalObject: "this"
указал в конфигурации. Если я правильно понимаю официальную документацию, то этого не должно быть.
webpack.config.js
const path = require( "path" );
// const webpack = require( "webpack" );
const serverConfig = {
mode: "production",
entry: "./src/Check4.js",
target: "node",
output: {
path: path.resolve( __dirname, "dist" ),
filename: "Check4.node.js",
globalObject: "this",
library : {
type: "commonjs2",
export: "default"
}
}
};
const clientConfig = {
mode: "production",
entry: "./src/Check4.web.js",
target: "web",
output: {
path: path.resolve( __dirname, "dist" ),
filename: "Check4.js",
globalObject: "this",
library : {
name: "Check4",
type: "window",
}
}
};
module.exports = [serverConfig, clientConfig];
для справки, вот первые несколько байтов, выведенных webpack, чтобы показать, что он использует глобальное «я» вместо «это».
(()=>{var e={172:e=>{self,e.exports=(()=>{"use strict";var e={502:...
Ответ №1:
Ответ был в моих зависимостях. Я написал класс, от которого зависел этот класс. Родительский класс не был скомпилирован, поэтому webpack пытался скомпилировать оба класса одновременно.
После многих часов я наткнулся на это, что привело меня к решению проблемы. https://github.com/markdalgleish/static-site-generator-webpack-plugin/issues/79
Эй, обновление; Немного осмотревшись, мне кажется, что эта ошибка вызвана зависимостью от изоморфной выборки (https://github.com/matthew-andrews/iso…). Похоже, что в документе не определены проблемы, с которыми сталкиваются люди, поскольку этот предварительный рендеринг не происходит в контексте браузера. Сегодня у меня больше нет времени разбираться в этом, чтобы понять, почему это так, или найти решения, но это моя догадка. Проверьте свои поля и зависимости.