Webpack 4:无法解析符号链接模块的依赖关系

问题描述 投票:1回答:1

从Webpack 1升级到4后,我遇到以下错误:

ERROR in ./node_modules/@my_symlinked_packages/base-accessibility-date-picker/lib/components/AcessibleDatePicker.component.js
Module not found: Error: Can't resolve 'react-dates/lib/utils/isInclusivelyAfterDay' in '/path_to_my_local_app/node_modules/@my_symlinked_packages/base-accessibility-date-picker/lib/components'
 @ ./node_modules/@my_symlinked_packages/base-accessibility-date-picker/lib/components/AcessibleDatePicker.component.js 32:29-83
 @ ./node_modules/@my_symlinked_packages/base-accessibility-date-picker/lib/index.js
 @ ./app/components/borrowing/holds/HoldsPauseDateSelect/HoldsPauseDateSelect.jsx
 @ ./app/components/borrowing/holds/HoldsPauseDateSelect/index.js
 @ ./app/components/borrowing/holds/PauseHoldWorkflowView/components/BasePauseHoldWorkflowView.jsx
 @ ./app/components/borrowing/holds/PauseHoldWorkflowView/components/SinglePauseHoldWorkflowView.jsx
 @ ./app/containers/ItemTransactionWorkflowContainer.jsx
 @ ./app/containers/WorkflowContainer.jsx
 @ ./app/components/widgets/ItemWidget/ItemWidget.jsx
 @ ./app/components/widgets/ItemWidget/index.js
 @ ./app/containers/widgets/ItemWidgetContainer.jsx
 @ ./app/routes/Routes.jsx
 @ ./app/bootstrap.js
 @ multi webpack-dev-server/client?http://localhost:3002 webpack/hot/only-dev-server ./app/bootstrap.js

我相信这个错误表明Wepback 4无法解析react-date模块,这是我正在进行符号链接的模块的依赖。

这是我的项目布局示例:

my_symlinked_packages
|-node_modules
|-package.json
|-src
  |-my_lerna_package1
    |-lib
    |-specs
    |-src
    |-package.json (contains react-dates as a dependancy)


consuming_application
|-node_modules
  |-@my_symlinked_packages
    |-my_lerna_package1
|-package.json
|-webpack.config.js
|-app

这是我的webpack.config.js的一个例子(它由几个js导入组成)

  //import dependancies
  //assign value to custom variables

  module.exports = { 
    devtool: 'eval',
    context: '/path_to_my_local_app',
    mode: 'development',
    entry:
    { app:
        [ 'webpack-dev-server/client?http://localhost:3002',
          'webpack/hot/only-dev-server',
          './app/bootstrap.js' ],
      vendors:
        [ 'raf/polyfill',
          'babel-polyfill',
          'immutable',
          'iso',
          'jquery',
          'lodash',
          'moment',
          'react',
          'react-router',
          'redux',
          'react-redux',
          'superagent',
          'when',
          'rxjs',
          'handlebars' ] },
    externals: [ 'farmhash' ],
    output:
    { path: '/path_to_my_local_app/public',
      filename: '[name].js',
      chunkFilename: '[name].js',
      publicPath: 'http://localhost:3002/' },
    module:
    { rules:
        [ {
          use: ['react-hot-loader/webpack', 'happypack/loader?id=babel'],
          test:    /\.jsx?$/,
          exclude: /node_modules/,
          include: /app|server|node_modules\/@my_symlinked_packages/
        },
        {
          test: /\.jsx?$/,
          loader: 'eslint-loader',
          exclude: /node_modules/,
          include: /app|server/
        },
        {
          test:   /\.s?css$/,
          use: [
            'style-loader',
            {
              loader:'css-loader',
              options: {
                importLoaders: 2,
                sourceMap: true
              }
            },
            { 
              loader: 'postcss-loader',
              options: { sourceMap: true, config: { path: postcssConfig } }
            },
            {
              loader: 'sass-loader',
              options: {
                outputStyle: 'expanded',
                sourceMap: true
              }
            }]
        },
        {
          test:   /\.(png|jpg|gif|ico|woff|woff2|eot|ttf|svg)$/,
          loader: 'url-loader?limit=' + inlinedAssetSizeLimit
        },
        {
          test: require.resolve('jquery'),
          loader: 'expose-loader?$!expose-loader?jQuery'
        },
        {
          test: /handlebars\.js/,
          loader: 'expose-loader?Handlebars'
        } ] },
    resolve:
    { symlinks: false,
      modules:
        [ '/path_to_my_local_app/app',
          '/path_to_my_local_app/node_modules',
          '/path_to_my_local_app/vendor' ],
      alias:
        { handlebars: 'handlebars/dist/handlebars.js',
          containers: '/path_to_my_local_app/app/containers',
          constants: '/path_to_my_local_app/app/constants',
          actions: '/path_to_my_local_app/app/actions' },
      extensions: [ '.js', '.jsx' ] },
    plugins: [ // hot reload
      new HappyPack({
        id: 'babel',
        threads: 4,
        loaders: [
          {
            loader:  'babel-loader',
            query: {
              cacheDirectory: true
            }
          }
        ]
      }),
      new webpack.HotModuleReplacementPlugin(),
      new webpack.DefinePlugin({
        __CLIENT__: true,
        __SERVER__: false,
        __DEVELOPMENT__: true,
        __DISABLE_SSR__: false
      }),
      new webpack.LoaderOptionsPlugin({
        options: {
          sassLoader: {
            data: `$is-widget: ${widgetBuild ? 'true' : 'false'};`
          },
          eslint: {
            emitWarning: true
          },
          progress: true
        }
      }),

      // https://github.com/halt-hammerzeit/webpack-isomorphic-tools
      new WebpackIsomorphicToolsPlugin(webpackIsomorphicToolsConfig).development()
    ]
  }

这是我的postcss.config.js的片段

module.exports = {
  plugins: {
    autoprefixer: {
      browsers: ['last 2 version', 'ie >= 9', 'iOS >= 8']
    }
  }
};

欢迎任何帮助!

webpack symlink webpack-4 lerna
1个回答
0
投票

我们能够通过添加指向符号链接目录的结节模块的解析路径来解决此问题。

// example shows resolve config pointing to the directory which stores the
// symlinked mono repos
    module.exports = {
      resolve : {
        modules: [
          path.resolve('./app'),
          path.resolve('./node_modules'),
          path.resolve('./vendor'),
          path.resolve('../my_symlinked_packages/node_modules')
        ]
      }
    };
© www.soinside.com 2019 - 2024. All rights reserved.