Требуется нормальный файл JavaScript из скомпилированного скрипта узла? - PullRequest
0 голосов
/ 22 сентября 2018

Во-первых, я хочу заявить, что я новичок во всем, что связано с узлом ... Прежде чем изложить свою проблему, приведу пример кода для ссылки.

test.js

//test.js
const myMessage = 'Bananas';
export default myMessage; // Im not to sure about this line (problem)

main.js

//main.js
const test = require('./test.js');
console.log(test.myMessage);

Я хочу требовать нормального внешнего сценария JavaScript, называемого test.js, из скомпилированного сценария узла, называемого main.js.Я скомпилировал main.js, просто набрав node main.js в моем терминале.Но узел выдал ошибку «Неожиданный экспорт токена».Я знаю, что я делаю что-то не так здесь.Я использую "Модули"?Как я могу исключить экспортную выписку?

Спасибо за чтение, извините, если моя проблема заключается в том, чтобы заставить людей говорить в лицо тому, насколько глупой может показаться эта проблема.

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Я думаю, что внешний файл, который вы пытаетесь запросить, это esModule .Такие файлы не могут требоваться напрямую, если вы не перенесете их в commonJSModule .У вас есть два решения.

  • Транспортируйте esModule в commonJSModule, используя babel.(или измените экспорт на module.exports в вашем test.js)
  • Если вы используете новую версию узла, вы можете изменить его расширение на .mjs (переименуйте test.js в test.mjs)

Пожалуйста, посмотрите на эту статью среднего, которая должна помочь.

https://medium.com/@giltayar/native-es-modules-in-nodejs-status-and-future-directions-part-i-ee5ea3001f71

0 голосов
/ 22 сентября 2018

Использовать регистр babel: https://babeljs.io/docs/en/babel-register

npm install @babel/core @babel/register @babel/preset-env --save

И требовать его в вашем main.js:

require('@babel/register')({
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          node: true
        }
      }
    ]
  ],
  ignore: [
    /node_modules/
  ]
});

Это будет анализировать другие необходимые файлы через babel, которых нет в node_modulesТаким образом, импорт / экспорт ES6 будет работать, и он также будет выполнять функции полизаполнения, отсутствующие в текущей версии узла (node: true).

Обратите внимание, что это следует использовать только в том случае, если вам требуются внешние сценарииВы не можете разумно изменить.Анализировать каждую потребность тяжеловесно, поэтому, если нужно, сделайте ignore как можно более строгим (или даже лучше используйте опцию only), чтобы вы анализировали только то, что вам нужно.

0 голосов
/ 22 сентября 2018

Синтаксис export еще не поддерживается в Nodejs (это в альфа-версии), вместо этого Nodejs предоставляет глобальный объект * (module.exports), который вы получаете с помощью вызова require(), поэтому вы простонеобходимо установить это свойство объектов для объекта, который вы хотите экспортировать:

 const myMessage = 'Bananas';
 module.exports.myMessage = myMessage;

или короче:

 exports.myMessage = 'Bananas';

* глобальный в смысле "он существует, хотя у вас нет«Определить его», фактически для каждого выполняемого скрипта будет создан новый объект module, доступ к которому возможен только внутри этого скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...