Как правильно использовать lodash-ы в машинописи? - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно использовать lodash-es в моем проекте машинописного текста, но я не могу правильно его настроить, он всегда сообщает об ошибках вроде SyntaxError: Unexpected identifier

hello.ts

import upperCase from 'lodash-es/upperCase'

console.log('Hello ' + upperCase('typescript') + '!');

package.json

{
  "scripts": {
    "demo": "ts-node hello.ts"
  },
  "dependencies": {
    "lodash-es": "4.17.11"
  },
  "devDependencies": {
    "@types/lodash-es": "4.17.1",
    "ts-node": "7.0.0",
    "typescript": "3.0.1"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}

При запуске ts-node hello.ts он сообщаетошибка типа:

/typescript-use-lodash-es-demo/node_modules/lodash-es/upperCase.js:1
    (function (exports, require, module, __filename, __dirname) { import createCompounder from './_createCompounder.js';
                                                                         ^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier
        at new Script (vm.js:79:7)
        at createScript (vm.js:251:10)

Я также настроил небольшую демонстрацию для этой проблемы, вы можете клонировать и попробовать ее, если вам нужно: https://github.com/freewind-demos/typescript-use-lodash-es-demo

С этим связан вопрос использования lodash-es with babel: Как правильно настроить babel для использования lodash-es? .Поскольку я не уверен, что у них точно такая же причина, я попросил набрать здесь текст

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

На самом деле, вы не должны использовать lodash-es, но использовать lodash, потому что lodash-es - это esm модуль, в то время как lodash - наш формальный commonjs модуль.

Однако, если вы хотитеиспользуйте lodash-es в узле, вы должны использовать его с esm вместо @babel/register.Я нашел @babel/register очень глючным, даже если я добавил babel-plugin-lodash или dynamic-import плагин или @babel/plugin-transform-modules-commonjs, @babel/polyfill и т. Д. ...

0 голосов
/ 17 октября 2018

ts-node компилирует .ts файлы по мере их загрузки.Это не касается .js файлов;либо они уже должны быть в форме, понятной для Node.js (например, без операторов ES6 import), либо вы должны использовать отдельный механизм для их преобразования, такой как @babel/register require hook (по существуто же самое, что используется babel-node).Вам все равно нужно настроить @babel/register, чтобы не игнорировать node_modules, как описано в другой ответ .Совет другого ответа - просто использовать lodash вместо lodash-es - это хорошо.

...