【问题标题】:Webpack can't find lodash submodules on linux but works fine on macOSWebpack 在 linux 上找不到 lodash 子模块,但在 macOS 上可以正常工作
【发布时间】:2018-04-03 20:34:34
【问题描述】:

我意识到我的电子应用程序不想在 linux 上正确构建,而在 macOS 上它可以正常工作。我不太清楚为什么。

所以在 macOS 上可以正常工作

let _snakecase = require('lodash/snakecase')
let _cloneDeep = require('lodash/clonedeep')
let _filter = require('lodash/filter')

在 linux 上,这会引发无法找到依赖项 lodash/snakecaselodash/clonedeep 的错误。奇怪的是它可以找到lodash/filter。如果像这样导入它,我只能让它工作:

import {snakecase as _snakecase} from 'lodash'
import {clonedeep as _cloneDeep} from 'lodash'
import {filter as _filter} from 'lodash'

但我的问题是为什么我可以require('lodash/filter') 而不是require('lodash/snakecase')?我什至不知道从哪里开始调试。

当我尝试要求 lodash/snakecase 时的确切错误:

This dependency was not found:

* lodash/snakecase in ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&index=0&bustCache!./src/views/modals/ChannelModal.vue

【问题讨论】:

    标签: node.js webpack ecmascript-6 electron babeljs


    【解决方案1】:

    macOS 上的文件系统默认区分大小写,这意味着当你请求一个不存在的文件时,比如说file.js,它会很乐意给你@987654325 @如果存在的话。在区分大小写的文件系统上,它只会告诉您file.js 不存在并导致错误。 Linux 上的文件系统区分大小写。

    您要查找的文件是cloneDeep.jssnakeCase.js,但您尝试分别导入不存在的clonedeepsnakecaselodash/filter 有效,因为 filter.js 确实存在。

    正确的导入是:

    let _snakecase = require('lodash/snakeCase')
    let _cloneDeep = require('lodash/cloneDeep')
    

    【讨论】:

    • 哇,我不敢相信我没有想到这一点。他们应该在相应的 npmjs 页面上的文档中真正解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2012-07-26
    • 2020-12-26
    • 2019-01-21
    相关资源
    最近更新 更多