未捕获的TypeError:无法分配给只读属性&#39; exports&#39;对象&#39;#<对象>&#39;

时间:2017-10-23 18:13:17

标签: javascript jquery webpack

我有错误:&#34;未捕获的TypeError:无法分配给只读属性&#39; exports&#39;对象&#39;#&#39;&#34;。在build.js中,这个错误在行&#34; module.exports = main;&#34;中。哪里出错了?我的模块:

这是我的主要文件script.js

const showContent = require('./modules/showContent');
const main = require('./modules/screens/main');
const about = require('./modules/screens/about');
const blog = require('./modules/screens/blog');
const contacts = require('./modules/screens/contacts');
const gallery = require('./modules/screens/gallery');

$(document).ready(function() {
  console.log(main);
  showContent(main);
    $(document).on("click", "a", (e) => {
        if ( $(this).hasClass('active') ) return;

        $("a").removeClass('active');
        $(this).addClass('active');

        $(".slide").slideUp(800);

        const self = this;
        setTimeout(() => showContent($(self).attr('id')), 800);
    });
});

main.js

const getElementFromTemplate = require('../getElementFromTemplate');
const showContent = require('../showContent');

const main = getElementFromTemplate(`<div>
        <h2>Добро пожаловать на Фиджи</h2>
        <img src="images/img03.jpg" alt="img03">
        <p><b>Фиджи</b> - название государства и архипелага из 332 островов, на которых это государство находится: на юго-западе Тихого океана, среди других островов и архипелагов Меланезии - правда, расстояние между этими частицами суши составляет сотни и тысячи километров. Острова архипелага Фиджи коралловые и вулканические; примерно 1/3 их нежилые, однако это и привлекает внимание желающих уединиться по разным причинам - влюбленных пар, молодоженов, романтиков и просто любителей нетронутой природы.</p>
      </div>
      <div>
        <h2>Климат Фиджи: мягкие тропики</h2>
        <img src="images/img04.jpg" alt="img04">
        <p>Климат влажный тропический, но сильной жары нет ни летом, в сезон дождей - около 26 ° C, ни в сухой сезон - около 23 ° C: здесь комфортно чувствуют себя и взрослые, и дети. Правда, бывают и более высокие температуры - 28-34 ° C, но в ночи всегда становится прохладнее.</p>
        <p>Для отдыха обычно рекомендуется выбирать период с мая по декабрь, когда дождей почти нет. Погода отличается в разных частях архипелага: так, на южных берегах основных островов дожди идут чаще и больше высокая влажность воздуха.</p>
      </div>
      <div>
        <h2>Пляжи на Фиджи</h2>
        <img src="images/img05.jpg" alt="img05">
        <p>Больше всего туристов «привлекается» на остров Вити-Леву, крупнейший в архипелаге Фиджи. Здесь любой может найти себе место по душе и по карману: есть и первоклассные отели и недорогие гостиницы. Пляжи тянутся более чем на 100 км - их называют Коралловым берегом; территория острова - более 10 000 км, и на побережье расположено множество различных курортов, от фешенебельных до тихих и незаметных. Для семейного отдыха хороший пляж Paradise, тихий и спокойный, с мелким белым песком и почти не затронутым «окультуриванием»: пальмы рядом растут прямо у берега и скрыться от жаркого солнца - не проблема, что особенно актуально для семей с детьми. Однако, об удобных головные уборы, солнечные очки и солнцезащитные средства следует позаботиться вовремя: загар на Фиджи очень красивый, но получить солнечные ожоги, в том числе и находясь в воде, можно «в два счета». Взрослые могут найти себе здесь массу развлечений, от дайвинга до рыбалки с арендой катера.</p>
      </div>
      <div>
        <h2>Экскурсии и памятные места на Фиджи</h2>
        <img src="images/img06.jpg" alt="img06">
        <p>Кажется, что памятников на Фиджи не может быть много, но их, исторических и природных, наберется немало. Сигатока - песчаные дюны, является уникальным местом: на Фиджи везде зелень, а здесь - волнообразные холмы из песка до 60 м высотой - считается, что они формировались миллионы лет. История местности не менее интересна, чем пейзаж: здесь создан археологический парк и открыт музей. Археологи находят вещи, которым около 3000 лет, а здешние захоронения еще старше.</p>
        <p>На Фиджи очень много национальных парков и заповедников, за охраной которых постоянно следят местные власти: ведь нетронутая природа - главное богатство этой небольшой и гостеприимной страны с приветливыми и веселыми жителями.</p>
      </div>`);

module.exports = main;

showContent.js

const showContent = (contentTemplate) => {
  const content = document.querySelector(`main`);
  content.innerHTML = ``;
  content.appendChild(contentTemplate);
};

module.exports = showContent;

webpack.config.js

module.exports = {
    entry: "./script",
    output: {
        filename: "build.js"
    }
};

1 个答案:

答案 0 :(得分:3)

more info - webpack/issues/4039

原因

  

在指示Babel不转换模块语法之后,这个问题对我产生了新的影响。它只在尝试在ES模块中使用CommonJS样式module.exports时发生。这可以通过简单地替换所有module.exports = ...来导出默认值来修复......在适用的情况下,因为这似乎等同于旧的Babel风格的ES模块转换。 (请注意,使用require导入此模块可能会为您提供一个默认键而不是默认导出本身的选项,因此最好立即切换整个代码库。)

jchv@github

在.babelrc中设置

删除.babelrc中的“modules:false”

预设-es2015选项 - modules

  

“amd”| “umd”| “systemjs”| “commonjs”| false,默认为“commonjs”   启用将ES6模块语法转换为其他模块类型   将此设置为false将不会转换模块。