导入本地npm软件包时出错

时间:2018-08-14 16:23:57

标签: javascript npm webpack vue.js

我们有几个网站,每个网站都在其自己的项目中,并且我们希望将它们全部迁移到使用Vue.js。每个网站都有其自己的目录,其中包含.vue个文件,然后使用Webpack将它们捆绑在一起。我们有一个Webpack配置,可以将.vue文件,bundle,lint和管道通过babel转换成所有文件,并且运行良好。

但是,既然我们已经进行了数周的工作,我们已经注意到有许多组件和核心javascript文件非常相似,并且理想情况下,我们希望将它们引入vue组件和功能的共享库中。

我们已经将几个.vue提取到网站旁边的文件夹中,并将它们作为具有自己的package.json的基本npm模块放在一起,并使用npm文件include包含它们,因此在{ {1}}看起来像:package.json。现在,当我们尝试使用Webpack构建捆绑包时,会出现错误:

  

../ CommonJavascript / Vue / index.js中的错误   模块构建失败(来自./node_modules/eslint-loader/index.js):   错误:无法加载插件反应:找不到模块“ eslint-plugin-react”

我不确定该错误的出处,因为我们没有在任何地方使用react,并且在将文件移出之前看起来很高兴可以很好地构建。目前,共享模块中唯一的依赖关系是moment,它仅包含4个"vue-shared": "file:../CommonJavascript/Vue",以及将它们捆绑在一起的基本包装器:

.vue

但是,我很好奇,所以我决定添加软件包(即使我们不需要它)以查看它是否可以解决问题,但随后出现一个新错误:

  

../ CommonJavascript / Vue / index.js中的错误   模块构建失败(来自./node_modules/babel-loader/lib/index.js):   ReferenceError:在“ base”中指定为0的未知插件“ transform-runtime”,试图相对于“ C:\ Projects \ Tmo \ Code \ CommonJavascript \ Vue”进行解析

现在,有一点意义了,我们确实在主项目上使用了babel运行时转换,但是共享项目中的任何内容都不需要它,即使它是 ,当然,它包含在主项目中的事实意味着它仍然应该构建。

部分地,似乎我只是不了解npm解决依赖关系的方式。它似乎正在尝试通过查看共享文件项目来解决一些依赖性,但我不知道为什么。而且我也不知道这种对eslint-plugin-react的奇怪依赖来自哪里。

所以我想这是一个多部分的问题。 npm尝试解决依赖关系的方式是什么?通过将import button from 'Button.vue' import loading from 'Loading.vue' import modal from 'Modal.vue' import progressBar from 'ProgressBar.vue' export default { button, loading, modal, progressBar, } 文件移动到一个单独的项目中,并将其包装为一个模块并在主项目中需要它,我是否做对了?否则,拥有这样的共享依赖关系的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这是由两个独立的问题共同引起的:

  • 导入语句未正确引用文件,正确的语法为:import button from './Button.vue'(请注意对文件路径的更改)
  • 当您通过路径将本地软件包添加到npm时,它会创建一个指向文件夹的符号链接,而不是复制文件(这是npm v5 +以来的行为)。然后,这将更改webpack尝试解析依赖项的方式,因为它随后从共享文件的位置查找以尝试解决包含eslint和babel之类的依赖项。
  • eslint-plugin-react依赖项是因为我在Visual Studio代码中安装了eslint插件,该插件似乎创建了一个.eslintrc文件,该文件引用了我的用户文件夹(c:\ users \ <用户名>)。如果找不到配置文件,Eslint将使用它作为默认值(由于上述路径问题,它在共享文件上方查找,因此无法找到该配置文件)

我们已经决定将对这些文件使用git子模块