Удалить bootstrap Webpack из выходного файла
Ну, я знаю, что Webpack позволяет нам импортировать пакеты с require
и это инфраструктура из Webpack.
но, разве это не бесполезно, когда вы не используете require
запись в файл?
у меня есть это test.js
запись:
console.log('Test');
и вывода
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 1);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */,
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(2);
/***/ }),
/* 2 */
/***/ (function(module, exports) {
console.log('Test');
/***/ })
/******/ ]);
это бесполезный код, который также не позволяет мне использовать глобальные переменные!
по крайней мере для меня, это! и именно поэтому я хотел бы знать, есть ли какой-либо плагин или обходной путь, чтобы удалить его?
2 ответов
после некоторых исследований, я не мог найти правильный способ сделать это.
но исследуя альтернативу, я мог бы найти rollupjs
, оптимизированный пакет, который работает как Webpack, но мы можем достичь нашей цели с меньшим количеством кода
// rollup.config.js
export default {
input: 'src/main.js',
output: {
file: 'bundle.js',
format: 'cjs'
}
};
он также может быть составлен в различных форматах.
формат сгенерированного пакета. Одно из следующих:
amd
– Асинхронный Модуль Определения, используемые с грузчиками модуль вроде RequireJScjs
– CommonJS, подходит для узла и Browserify / Webpackes
- сохраните пакет как файл модуля ESiife
- самоисполняющаяся функция, подходящая для включения в качестве тега. (Если вы хотите создать пакет для вашего приложения, вероятно, вы хотите использовать это, потому что это приводит к меньшему файлу размеры.) umd-универсальное определение модуля, работает как amd, cjs и iife все в один
для получения дополнительной информации посетите документация
решение моего вопроса
в формате iife
, он инкапсулирует область моего модуля, поэтому скомпилированный test.js
в результате:
(function () {
'use strict';
console.log('Test');
}());
что является более разумным подходом для составления ES modules
в зависимости от формата.
Если вам нужно связать / сжать устаревший код с накопительным пакетом.js и не хочу iife, я смог использовать флаг командной строки --no-treeshake
rollup -c --no-treeshake`
вместе с плагином компилятора закрытия Google для выполнения этого
import closure from 'rollup-plugin-closure-compiler-js';
import glob from 'glob';
const inputPath = './Static/JavaScript/';
let configArr = [];
for (let val of glob.sync(inputPath + '*.unpack.js')) {
let obj = {};
const filenameRegex = val.match(/([\w\d_-]*)\.?[^\\/]*$/i);
obj['input'] = filenameRegex['input'];
obj['output'] = {
file: inputPath + filenameRegex[1] + '.js',
format: 'cjs'
};
obj['plugins'] = [closure({
compilationLevel: 'WHITESPACE_ONLY',
processCommonJsModules: true,
languageIn: 'ES5',
languageOut: 'ES5'
})]
configArr.push(obj);
}
export default configArr;