Как упаковать общие файлы .js и .vue для веб-пакета - PullRequest
1 голос
/ 10 мая 2019

Моя команда недавно начала переносить наши сайты на vue.js.В целом все прошло очень хорошо, но у нас есть проблемы с совместным использованием общих файлов javascript и компонентов vue между различными веб-сайтами.Я опубликовал вопрос об этом некоторое время назад, и мы решили сохранить все общие файлы в отдельном репо и использовать подмодуль git для вставки файлов в проекты.По ряду причин мы хотим отойти от этого, и мой менеджер проекта попросил меня рассмотреть альтернативы, но я действительно изо всех сил.

Мы хотим, чтобы все файлы были включены вместе спроекты и импортировать их в случае необходимости.Таким образом, макет файла будет просто

Project
├── ourSharedStuff
│   ├── usefulFunctions.js
│   └── coolwidget.vue
├── website1
│   └── package.json
└── website2
    └── package.json

Тогда мы подумали просто импортировать нужные нам файлы, вот так

import { somefunction } from '../ourSharedStuff/usefulFunctions';
import { coolWidget } from '../ourSharedStuff/coolwidget.vue';

Однако, поскольку импорт идет из-за пределов проекта, кажется,путать веб-пакет, когда он пытается разрешить зависимости для всего, что происходит из общего проекта (например, если coolwidget.vue нужны моменты).Именно эта проблема привела к тому, что мы в первую очередь использовали субмодули.

Поскольку это, казалось, вызывало проблему, я подумал: «А, может быть, если он пытается разрешить зависимости от общего проекта оттуда, он должен иметь своисобственные зависимости, объявленные в package.json ".Поэтому я попытался добавить package.json в общий проект и использовать npm install ../ourSharedStuff/ для включения его в проект.Но это тоже не сработало, и у меня все еще были подобные проблемы, потому что когда вы используете npm для установки такого расположения файла, он просто создает символическую ссылку, и веб-пакет, похоже, все еще запутывается.

Посленекоторые прогуглили, оказалось, что если вы используете npm для установки архива, он работает правильно и создает фактические файлы в node_modules.Это прекрасно работало, за исключением одной проблемы ... файлы в общем проекте записаны в es6 и должны быть перенесены.Потому что, как и почти все, мы исключаем node_modules из запуска через babel:

test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
    presets: ['@babel/preset-env'],
    plugins: [
        '@babel/transform-runtime',
    ]
}

Итак, я подумал: «Ну, это исключение - это просто регулярное выражение, я просто изменю его, чтобы исключить все папки».кроме наших ".Поэтому я изменил его на: /node_modules\/(?!ourSharedStuff)/

И веб-пакет начал давать эзотерические сообщения, когда я пытаюсь собрать

ПРЕДУПРЕЖДЕНИЕ в ./node_modules/core-js/modules/_is-object.js 4: 9-16 «экспорт по умолчанию» (импортированный как «_typeof») не найден в «@ babel / runtime / helpers / typeof»

Я в полной растерянностикак добиться чего-то, что должно быть довольно легко. Итак, в конце концов, мой вопрос: каков наилучший способ иметь общие файлы .js и .vue, которые написаны в es6 и могут иметь свои собственные внешние зависимости, совместно используемые несколькимипроекты, в которых необходимые преобразования применяются при создании этих проектов?

...