Удалить 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 – Асинхронный Модуль Определения, используемые с грузчиками модуль вроде RequireJS
  • cjs – CommonJS, подходит для узла и Browserify / Webpack
  • es - сохраните пакет как файл модуля ES
  • iife - самоисполняющаяся функция, подходящая для включения в качестве тега. (Если вы хотите создать пакет для вашего приложения, вероятно, вы хотите использовать это, потому что это приводит к меньшему файлу размеры.) 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;