peerDependency не определен, несмотря на то, что он присутствует в node_modules - PullRequest
0 голосов
/ 18 апреля 2019

Я учусь создавать библиотеку NPM.Исходный код для него можно найти ЗДЕСЬ .Я поставил lodash как peerDependency, чтобы приложение (которое использует библиотеку) могло установить его самостоятельно.

Теперь проблема в том, что при установке библиотеки (@a6kme/math) в приложении я получаю сообщение об ошибке Unhandled Rejection (ReferenceError): lodash is not defined при импорте моей библиотеки.Я проверил, и приложение было установлено приложением через какую-то другую библиотеку.(lodash присутствует в папке node_modules)

=== НЕКОТОРЫЕ ФАЙЛЫ ИЗ КОДОВОГО Хранилища ===

Мой package.json

{
  "name": "@a6kme/math",
  "version": "1.0.5",
  "description": "",
  "main": "dist/math.js",
  "scripts": {
    "test": "jest",
    "build": "webpack --mode=production",
    "prepare": "npm run test",
    "posttest": "npm run build"
  },
  "files": [
    "/dist"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/a6kme/math.git"
  },
  "keywords": [
    "webpack",
    "webpack-library",
    "bundling",
    "library"
  ],
  "author": "a6kme",
  "license": "MIT",
  "devDependencies": {
    "@babel/core": "^7.4.3",
    "@babel/preset-env": "^7.4.3",
    "babel-eslint": "^10.0.1",
    "babel-loader": "^8.0.5",
    "eslint": "^5.3.0",
    "eslint-config-prettier": "^4.1.0",
    "eslint-plugin-import": "^2.17.2",
    "eslint-plugin-prettier": "^3.0.1",
    "jest": "^24.7.1",
    "lodash": "^4.17.11",
    "prettier": "1.17.0",
    "webpack": "^4.30.0",
    "webpack-cli": "^3.3.0"
  },
  "peerDependencies": {
    "lodash": "*"
  }
}

Мой webpack.config.js

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'math.js',
    library: 'mathJs'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader'
        }
      }
    ]
  },
  externals: [/^lodash\/.+$/]
};

Мой .babelrc

{
  "presets": ["@babel/preset-env"]
}

Я создал проблему github в хранилище кода.Пожалуйста, дайте мне какое-то направление, где посмотреть.

1 Ответ

1 голос
/ 22 апреля 2019

Ошибка была в том, как я пытался собрать свою библиотеку. LibraryTarget не был установлен в webpack.config.js. Конфигурация изначально была

output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'math.js',
  library: 'mathJs'
}

Хотя это должно было быть

output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'math.js',
  library: 'mathJs',
  libraryTarget: 'umd',
  globalObject: 'this'
}

Из документов WebPack

libraryTarget: 'umd' - это предоставляет вашей библиотеке все определения модулей, позволяя ей работать с CommonJS, AMD и в качестве глобальной переменной.

Поскольку это было мое первоначальное требование, чтобы мою библиотеку можно было использовать через es6 import или как тег script в браузере.

...