2016-12-31 2566 views
3

我是学习EC6的java开发人员。我使用npm下载JavaScript包和webpack来创建最终的bundle.js文件。多个项目之间共享node_modules目录

我有一个很好的项目文件夹,其中包含与java文件的java模块,我想添加EC6 JavaScript文件到我的web模块。我使用maven来管理java jar依赖库。

这是我的文件夹结构:在我的项目/网络模块,1/src目录/主/ web应用文件夹

my-project 
    |-common-module 
    |-ejb-module 
    |-web-module-1 
    | |-src 
    |  |-main 
    |   |-java 
    |    |-com.a.b 
    |     |-Hello.java 
    |   |-webapp 
    |    |-index.jsp 
    |    |-bundle.js 
    |    |-package.json 
    |    |-webpack.config.js 
    |    |-WEB-INF 
    |    |-node_modules <-- I WANT THIS FOLDER TO BE MOVED AWAY FROM HERE 
    |    |-app   <-- react + ec6 javascript files 
    |     |-action 
    |     |-components 
    |     |-... 
    |-web-module-2 
     |-<same structure then under web-module-1> 

当我执行NPM安装...命令,然后一个新的名称为的目录node_modules由npm在webapp目录下创建。该文件夹包含大量文件。

我的问题是,当我在我的第二个Web项目工作,并执行相同的NPM安装...命令,然后第二node_modules目录与我的项目/网络模块下的相同内容的创建-2/src/main/webapp目录。

我可以使用通用的,分开的node_modules目录来避免重复的文件并节省磁盘空间吗? 我可以存储js依赖项下ex。 /home/user/javascript/modules文件夹?

评论1:我不想以root身份执行npm并使用npm -g install

评论2:我也不想创建符号链接。

你能帮我吗?


编辑 我做了什么:

  • 我已经创造了JS包的新文件夹: /家庭/用户/ JavaScript的模块
  • 复制package.json文件到/home/user/javascript-modules
  • NPM安装--prefix /家庭/用户/ JavaScript的模块

之后必要的JS模块复制到我的的JavaScript模块/节点模块目录。太好了!

但是,当我试图执行的WebPack然后我得到一个丢失的模块错误:

  • CD我的项目/网络模块,1/src目录/主/ web应用
  • ./home/user/ JavaScript的模块/ node_modules /。斌/的WebPack

结果:

Hash: a6bf1a0d210729a54be9 
Version: webpack 1.14.0 
Time: 39ms 

ERROR in Entry module not found: Error: Cannot resolve module 'babel-loader' in /home/user/java/intellijmy-project/web-module-1/src/main/webapp 

评论:我webpack.config.js文件包含该内容的行:装载机: '巴别塔装载机'

是有没有办法指定webpack的“classpath”?我的意思是告诉webpack模块在哪里。


UPDATE 正如你在我试图解决许多不同的方面,我的问题,没有任何成功的注释中看到。对我来说,似乎我想做的事情不受webpack支持。说了这么伤心:(

也就是说,如果一些有任何工作,好和完整的解决方案,请与我们分享。谢谢。

+0

更新answer..hope它解决您的问题 –

+0

我想达到同样的事情。我结束了切换到[pnpm](https://github.com/pnpm/pnpm)。虽然它使用符号链接和硬链接来避免磁盘上的重复,但似乎工作得很好。 – sceid

回答

1

中序得到NPM在自定义位置的目录安装,您需要运行:

npm install --prefix path_to_node_modules_location 

编辑:这是不可能有本地文件夹,而不与它的package.json

唯一的“公共位置”的所有项目是全球一个 全球。位置包含所有常用软件包当地包含该项目的特定项目。

但是,我不知道它是这样一个好主意,因为你最终不得不确保他们的依赖性不发生冲突,因为在包版本的差异,为不同项目共同本地 node_modules文件夹。 这意味着要为多个项目维护package.json。

为了配置的WebPack寻找新的位置检查github link here

The loaders here are resolved relative to the resource which they are applied to. This means they are not resolved relative to the configuration file. If you have loaders installed from npm and your node_modules folder is not in a parent folder of all source files, webpack cannot find the loader. You need to add the node_modules folder as an absolute path to the resolveLoader.root option. (resolveLoader: { root: path.join(__dirname, "node_modules") })

+0

我正在执行my-project/web-module-1/src/main/webapp/webapp/npm install --prefix/home/user/javascript/packages。结果:npm WARN enoent ENOENT:no such file or directory,open /home/user/javascript/packages/package.json'。 – zappee

+0

这意味着我需要将package.json文件复制到分离的node_modules文件夹中?奇怪。 Maven的概念看起来更好... – zappee

+0

that ia odd ..http://stackoverflow.com/questions/14469515/how-to-npm-install-to-a-specified-directory –