【问题标题】:node module works but not if using npm link节点模块有效,但如果使用 npm 链接则无效
【发布时间】:2016-12-14 23:08:35
【问题描述】:

我正在为我的项目中的某个模块使用第 3 方库。我也想为这个库做出贡献,所以我使用了 npm link 以便我的代码更改更易于管理。当我尝试通过 npm/node_modules 正常包含库时,包已成功加载,但是当我将其移动到另一个文件夹并使用 npm 链接时,它会引发此错误

ERROR in ../react-google-maps/lib/utils/index.js
Module not found: Error: Cannot resolve module 'babel'

这是我的 package.json

    {
  "name": "Test",
  "version": "1.0.0",
  "description": "Logistics",
  "author": "wnoveno",
  "main": "index.js",
  "scripts": {
    "start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --port 9000",
    "build": "webpack -p",
    "test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js --recursive ./test",
    "test:watch": "npm run test -- --watch"
  },
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.5.1",
    "babel-core": "^6.5.2",
    "babel-loader": "^6.2.0",
    "babel-preset-es2015": "^6.1.18",
    "babel-preset-react": "^6.1.18",
    "babel-preset-stage-0": "^6.5.0",
    "babel-preset-stage-1": "^6.1.18",
    "chai": "^3.5.0",
    "chai-jquery": "^2.0.0",
    "jquery": "^2.2.1",
    "jsdom": "^8.1.0",
    "mocha": "^2.4.5",
    "webpack": "^1.12.9",
    "webpack-dev-server": "^1.14.0"
  },
  "dependencies": {
    "axios": "^0.11.0",
    "babel-runtime": "^6.9.2",
    "classnames": "^2.2.5",
    "css-loader": "^0.23.1",
    "extract-text-webpack-plugin": "^1.0.1",
    "http-server": "^0.9.0",
    "immutable": "^3.8.1",
    "lodash": "^4.13.1",
    "moment": "^2.13.0",
    "node-sass": "^3.4.2",
    "postcss-loader": "^0.9.1",
    "react": "^15.0.0",
    "react-big-calendar": "^0.9.12",
    "react-bootstrap": "^0.29.5",
    "react-cookie": "^0.4.6",
    "react-dom": "^15.0.0",
    "react-redux": "^4.4.5",
    "react-redux-loading-bar": "^2.0.2",
    "react-router": "^2.4.1",
    "react-router-redux": "^4.0.5",
    "react-tap-event-plugin": "^1.0.0",
    "redux": "^3.0.4",
    "redux-form": "^5.0.0",
    "redux-localstorage": "^0.4.0",
    "redux-persist": "^3.1.1",
    "redux-promise": "^0.5.3",
    "redux-promise-middleware": "^3.2.0",
    "redux-thunk": "^2.1.0",
    "sass-loader": "^3.2.0",
    "style-loader": "^0.13.1"
  }
}

和 webpack.config

const path = require('path')

module.exports = {
  entry: [
    './src/index.js'
  ],
  output: {
    path: __dirname,
    publicPath: '/',
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      exclude: /node_modules/,
      loader: 'babel'
    },
      {
        test: /(\.scss|\.css)$/,
        loaders: ['style', 'css', 'sass']
      }]
  },
  resolve: {
    root: [path.resolve(__dirname, 'src')],
    extensions: ['', '.js', '.jsx', '.scss'],
    modulesDirectories: [
      'node_modules',
      path.resolve(__dirname, './node_modules'),
      path.resolve(__dirname, './node_modules/react-google-maps/lib'),

    ]
  },

  // resolveLoader: {
  //     modulesDirectories: [
  //         './node_modules/react-google-maps/node_modules/babel-cli'
  //     ]
  // },
  devServer: {
    historyApiFallback: true,
    contentBase: './'
  },
  externals: {
    'config': JSON.stringify(require('./config-dev.json'))
  },

}
const path = require('path')

module.exports = {
  entry: [
    './src/index.js'
  ],
  output: {
    path: __dirname,
    publicPath: '/',
    filename: 'bundle.js'
  },
  module: {
    loaders: [{
      exclude: /node_modules/,
      loader: 'babel'
    },
      {
        test: /(\.scss|\.css)$/,
        loaders: ['style', 'css', 'sass']
      }]
  },
  resolve: {
    root: [path.resolve(__dirname, 'src')],
    extensions: ['', '.js', '.jsx', '.scss'],
    modulesDirectories: [
      'node_modules',
      path.resolve(__dirname, './node_modules'),
      path.resolve(__dirname, './node_modules/react-google-maps/lib'),

    ]
  },

  // resolveLoader: {
  //     modulesDirectories: [
  //         './node_modules/react-google-maps/node_modules/babel-cli'
  //     ]
  // },
  devServer: {
    historyApiFallback: true,
    contentBase: './'
  },
  externals: {
    'config': JSON.stringify(require('./config-dev.json'))
  },

}

这是包的 package.json

{
  "name": "react-google-maps",
  "version": "5.0.0",
  "description": "React.js Google Maps integration component",
  "main": "src/index.js",
  "files": [
    "lib/",
    "src/",
    "CHANGELOG.md"
  ],
  "scripts": {
    "clean": "rimraf lib",
    "prebuild": "npm run lint && npm run clean",
    "build:watch": "npm run build -- --watch",
    "build": "cross-env NODE_ENV=production babel src --out-dir lib",
    "lint": "cross-env NODE_ENV=test eslint .",
    "pretest:cov": "npm run lint",
    "pretest": "npm run lint",
    "test:cov": "cross-env NODE_ENV=test babel-node ./node_modules/.bin/isparta cover --report lcov _mocha -- $npm_package_config_mocha",
    "test:watch": "npm test -- --watch",
    "test": "cross-env NODE_ENV=test mocha $npm_package_config_mocha",
    "prerelease": "npm run build && git add -A && git commit -m 'chore(lib): compile from src using babel'",
    "release": "standard-version"
  },
  "config": {
    "mocha": "--compilers js:babel-register ./src/**/__tests__/*.spec.js --require ./src/__tests__/setup.js"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/tomchentw/react-google-maps"
  },
  "keywords": [
    "React.js",
    "React",
    "react-component",
    "google",
    "map",
    "maps",
    "place",
    "places",
    "googlemap",
    "googlemaps",
    "google-map",
    "google-maps",
    "google map",
    "google maps",
    "GoogleMapsMixin",
    "Map",
    "Marker",
    "Polyline",
    "Polygon",
    "Circle",
    "Directions",
    "InfoWindow",
    "SearchBox"
  ],
  "author": {
    "name": "tomchentw",
    "email": "developer@tomchentw.com",
    "url": "https://github.com/tomchentw"
  },
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/tomchentw/react-google-maps/issues"
  },
  "homepage": "https://tomchentw.github.io/react-google-maps/",
  "devDependencies": {
    "babel-cli": "^6.5.1",
    "babel-core": "^6.5.2",
    "babel-eslint": "^6.0.4",
    "babel-plugin-lodash": "^3.1.4",
    "babel-plugin-transform-flow-comments": "^6.5.0",
    "babel-plugin-transform-runtime": "^6.9.0",
    "babel-plugin-typecheck": "^3.6.1",
    "babel-preset-es2015": "^6.5.0",
    "babel-preset-react": "^6.5.0",
    "babel-preset-stage-0": "^6.5.0",
    "babel-register": "^6.5.2",
    "codeclimate-test-reporter": "^0.3.1",
    "cross-env": "^1.0.7",
    "eslint": "^2.2.0",
    "eslint-config-airbnb": "^9.0.1",
    "eslint-plugin-flowtype": "^2.4.0",
    "eslint-plugin-import": "^1.8.1",
    "eslint-plugin-jsx-a11y": "^1.2.2",
    "eslint-plugin-react": "^5.1.1",
    "expect": "^1.14.0",
    "isparta": "^4.0.0",
    "istanbul": "^0.4.2",
    "jsdom": "^9.2.1",
    "mocha": "^2.4.5",
    "react": "^15.1.0",
    "react-dom": "^15.1.0",
    "rimraf": "^2.5.2",
    "standard-version": "^2.2.1",
    "tomchentw-npm-dev": "^4.0.0"
  },
  "dependencies": {
    "babel-runtime": "^6.9.2",
    "can-use-dom": "^0.1.0",
    "google-maps-infobox": "^1.1.13",
    "invariant": "^2.1.1",
    "lodash": "^4.13.1",
    "marker-clusterer-plus": "^2.1.4",
    "react-prop-types-element-of-type": "^2.1.0",
    "scriptjs": "^2.5.8",
    "warning": "^2.1.0"
  },
  "peerDependencies": {
    "react": "^0.14.0 || ^15.0.0",
    "react-dom": "^0.14.0 || ^15.0.0"
  }
}

【问题讨论】:

  • 您可以尝试在另一个文件夹中单独安装它吗?
  • 是的,在单独的文件夹上安装 npm 可以正常工作。但是如果加载器位于单独的文件夹中,webpack 似乎无法识别它。这是我对为什么 babel 不被识别的猜测。
  • 您能告诉我们您如何具体链接吗?
  • 我使用了 npm 链接docs.npmjs.com/cli/link。它创建了指向节点模块中单独文件夹的符号链接,而不是将文件直接放在那里。这就是为什么它很奇怪,因为除了图书馆的(实际)位置之外,其他一切都是一样的。

标签: node.js reactjs webpack


【解决方案1】:

您的resolve 配置不正确,因为webpack 1 的resolve 配置令人困惑...

modulesDirectories 不接受绝对路径(即你用path.resolve 构建的东西),但只接受目录名称。默认的modulesDirectories 会做正确的事情。

您需要的是一个指向path.resolve(__dirname, 'node_modules')fallback(只是path.resolve(__dirname) 工作吗?我不知道)。

npm linked 模块本身需要另一个模块时,当它尝试resolve 依赖项时,它位于您项目的文件夹之外,因此它无法通过节点的正常解析访问您的node_modulesmodulesDirectories 实现了什么)。然后,webpack 的解析器将尝试查看 fallback 绝对路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 2017-02-16
    • 2019-12-07
    • 2021-06-30
    • 1970-01-01
    • 2013-09-19
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多