这是我在最早开始使用Node包时遇到的问题。我有一个完全相同的想法:“我可以使用npm来为我的项目提供所需的任何东西,太棒了!”然后尝试管理我如何引用每个依赖库。当时我并没有正确掌握npm不只是为了帮助我获取依赖,而是帮助我管理它们。
以下是很长的&的缺点:您不希望将任何东西从node_modules文件夹复制到其他更人性化的位置。有很多原因,但最大的原因是您不需要需要来复制node_modules以外的任何东西 - 您的项目需要的所有东西都在那里。
当你在ECMAScript中正在开发2015+,你应该永远只能要做以下(对于过于简单化代码道歉):
/* N.B. These all reside under node_modules, yet I don't
* have to spell out their paths under node_modules: */
import $ from 'jquery';
import _ from 'lodash';
import moment from 'moment';
import NiftyLibrary from 'niftywhatever';
// ... code ...
let $name = $('#name');
let now = moment();
// ... other code ...
换句话说,你的开发环境设置应该为你处理模块分辨率。你不应该指定你想要使用的jQuery库位于“node_modules/jquery/dist/jquery.min.js”。如果你这样做,你应该花一点时间弄清楚为什么你这样做 - 这是不必要的,这是一个时间和大脑吸吮,你宁愿写你的应用程序代码,而不是管理你的依赖关系......不管理node_modules树。
您提到您正在开发ES6模块,但未使用webpack,gulp,Grunt,汇总或任何其他构建或捆绑工具。您的项目是否打算完全在Node中运行?我问,因为最后我听到大多数浏览器都没有准备好本地运行ES6模块。那么你的模块如何被转换为ES5?也许你正以一种我从未听说过的新颖的方式来接近这件事,但根据我的经验,构建或捆绑工具是必要的。 (另外,它的确很有趣)
我以前使用过Grunt with RequireJS,但现在使用webpack 3和Babel以及一些额外的加载器(取决于项目类型I'米工作)。我使用npm脚本来处理我的顶级任务(运行开发服务器,构建完成的分发包,运行测试等),但是我让webpack处理将ES6转换为ES5的所有业务,转换Sass样式,预编译Vue组件等等。围绕webpack方法打包自己的想法有点工作量,但这非常值得。
也许webpack不适合你的风格 - 够公平的。但还有其他一些工具可以用来代替。他们都需要一点时间才能适应他们的方法,但他们都应该能够为您的依赖关注模块解决方案。一旦你建立了正确的构建环境,它应该停止成为你开发工作流程的可见部分;您只需通过名称引用相关库,将它们映射到模块局部变量并使用它们。
对您有帮助吗?
编辑:这是webpack特定的,但应该有其他捆绑或类似的选项可用的工具。
在webpack中,您可以使用copy-webpack-plugin将npm-sourced依赖项复制到单独的文件夹中。这在服务工作者中很有用,例如执行上下文稍有不同。
感谢您的回应!我不使用任何任务管理工具......我只是如上所述转换为npm脚本。我使用Rollup,一个缩小器等npm脚本很容易找到。我意识到webpack将解决几个问题。 Rollup有一个用于查找捆绑依赖关系的插件,我可以尝试它。我不想使用凉亭,这是npm使用的要点。 CDN可能是最好的答案。详情请参阅:https://medium.com/@backpaces/es6-modules-part-1-migration-strategy-a48de0b7f112 https://medium.com/@backspaces/es6-modules-part-2- libs-wrap-em-up-8715e116d690 – backspaces
是的,它是有帮助的!哦,es6模块在我使用的所有浏览器中。我认为它们也是移动版本。出血的边缘和所有。再次感谢。 – backspaces