Всем известно (если пока непонятно, можноНажмите здесь>>),umd
Формат представляет собой кроссплатформенное модульное решение, совместимое с узлом и браузерами, но все еще есть проблемы при его использовании непосредственно в узле:
Повторение проблемы
По поводу недавнего написания собственных плагинов, когда случайно обнаружил ссылку под webpacknode_modules
Приведенные ниже файлы ведут себя несовместимо с файлами в папке, на которую имеется прямая ссылка. Содержимое файла - это тот же файл, упакованный webpackumd.js
,отnode_modules
импортированные можно использовать напрямую, но из普通文件夹中
Импортированный файл сообщит об ошибке в браузере, в чем причина? ? Это искажение человеческой природы или упадок нравственности? ?
Подробное описание проблемы
// vue.config.js
let config = {
baseUrl: process.env.NODE_ENV === "production" ? "/ele-multi-cascader/" : "/",
configureWebpack: {
output: {
libraryExport: "default"
}
}
};
module.exports = config;
// babel.config.js
module.exports = {
presets: [
["@vue/app", {
useBuiltIns: "usage"
}]
]
};
// cli3 构建命令 --target lib 构建符合umd规范产出
// vue-cli-service build --name cascader --entry ./src/index.js --target lib --mode production
Скриншоты сборки:
Для исключенияcli3
Плагины мешают, пользуюсьcli2
изvue
Проект также был опробован, и производительность стабильна!
// 成功
import Vue from 'vue'
import eleMultiCascader from "../node_modules/ele-multi-cascader/dist/cascader.umd";
import eleMultiCascader from "ele-multi-cascader/dist/cascader.umd";
import eleMultiCascader from "ele-multi-cascader";
let eleMultiCascader = require("../node_modules/ele-multi-cascader/dist/cascader.common");
let eleMultiCascader = require("ele-multi-cascader/dist/cascader.umd");
let eleMultiCascader = require("ele-multi-cascader");
// 失败
import eleMultiCascader from "../dist/cascader.common";
let eleMultiCascader = require("../dist/cascader.umd")
// 在页面直接引用
// <script src="./cascader.umd.js"></script>
Начальная производительность заключается в том, что до тех пор, покаnode_modules
Импортированные файлы можно использовать в обычном режиме.
- Объекты подключаемых модулей, на которые успешно ссылаются, успешно распечатываются, что выглядит так красиво...
- Неудачное цитирование места автомобильной аварии
Нажмите, чтобы узнатьVue
даundefined
, ВТФ?
Как решить?
Сначала я всегда думал, что это узел模块引用机制
Проблемы, вызванные, а затем я тщательно понял соответствующие спецификации снова,node
поддерживаетсяcommonJs
,а такжеumd
совместимcommonJs
Так что это то же самое, что и узел模块机制
Это не имеет значения.
Я еще думал над этим вопросом, когда засыпал.После всех вышеперечисленных выступлений можно предположить, что это может быть толькоwebpack
Проблемы, вызванные упаковкой.umd
Этот совместимый синтаксис находится вnode
непосредственно в окружающей средеrequire
Его нельзя использовать напрямую, если вы хотите использовать его в обычном режиме, вы должны пройти транскодирование. Итак, транскодирование! !
Кто отвечает за транскодирование? Определенно естьBabel
Я просто не знаю, какой плагин использовать. На данный момент проблема решена на 90%.
plugin-transform-modules
Открытьnode_modules
из@babel
В папке видно несколько плагинов про конвертацию модулей!
Истина уже ясна, этоplugin-transform-modules-umd,babel
по умолчанию будетnode_modules
Файлы, введенные в файл, перекодируются согласно соответствующим спецификациям, а другие папки - нет, если только вы не настроите это вручную.
Откройте официальный сайт, и вы увидите серию вводных, поэтому я не занимаюсь обработкой документов, а грубо настраиваю ее в проекте.
// babel.config.js
module.exports = {
presets: [
[
"@vue/app",
{
useBuiltIns: "usage"
}
]
],
// here
plugins: ["@babel/plugin-transform-modules-umd"]
}
// main.js
import eleMultiCascader from "../dist/cascader.common";
console.log("TCL: eleMultiCascader", eleMultiCascader)
Беги с азартомyarn serve
, Наконец увидел консоль классную сцену! Успешно решил проблему.
Эпилог
Обычно я не сталкиваюсь с этой проблемой при перемещении кирпичей, и меня это может волновать больше всего.babelrc
способ конфигурации. Умелое использование инструментов cli, незаметно перед配置工程师
. CLI это конечно волшебное оружие для повышения эффективности, но при их использовании следует учитывать, что за ним стоят какие-то инструменты, которые молча его поддерживают.Это не требует глубокого понимания каждой детали, но необходимо понимать общая архитектура и принципы работы. Руководствуясь этими структурами и принципами, вы не будете похожи на безголовую муху, когда столкнетесь с какими-либо проблемами в будущем. По крайней мере, есть направление, и правильное направление означает, что оно недалеко от истины!
Ну а в этот раз ступая на яму, чтобы ободрить всех! Если вы нашли что-то не так, пожалуйста, поправьте меня!
Наконец, беззастенчиво рекламируем, главный герой — плагин, вызвавший указанную выше проблему,ElementUI
из多选级联选择器
. добро пожаловать, добро пожаловатьStart
Ссылка здесь >>, побег~