SailsJS在视图中包含node_module

时间:2017-04-03 13:58:08

标签: npm gruntjs sails.js vuejs2

我使用风帆(http://sailsjs.com)来开发一个小平台。文档后,一切顺利。但是对于这个javascript框架世界和npm等新手,我一直遇到麻烦,包括其他node_modules并在.ejs视图中使用它们...... 我知道并非所有模块都包含在视图中,但我如何设法包含一些? 试图使用https://www.npmjs.com/package/vue-slider-component 提前谢谢你,如果这个错误显而易见,那就很抱歉。

1 个答案:

答案 0 :(得分:3)

你的困惑是可以理解的。问题是,直到最近,node_modules中安装的内容仅用于后端代码;也就是说,你的Sails.js控制器动作,模型等等。毕竟,node_modules文件夹中有单词" Node"就在其中,它是为了与NPM( Node 包管理器)一起使用而创建的,以帮助组织 Node (即服务器端 JavaScript)文件!

虽然许多前端插件已经(现在仍然)在Bower上发布,但像Angular 2和Vue这样的新框架经常将其插件发布到NPM,因为它减少了应用程序的移动部件数量。问题是,如果您在服务器呈现的require('vue-slider-component')视图中尝试.ejs服务器(即Sails.js)将尝试在其之前加载并运行该代码呈现视图,您真正想要的是该插件在浏览器中运行

长期解决方案是使用BrowserifyWebpack之类的东西将所有前端JavaScript文件编译成"捆绑"。例如,如果您有一个类似assets/js/my-vue-app.js的文件,其中包含以下行:

import vueSlider from 'vue-slider-component/src/vue2-slider.vue'

然后Browserify将看到该行,加载vue2-slider.vue文件,将其添加到my-vue-app.js文件的顶部,执行其他魔法,将其与其他前端.js文件合并然后输出browserified.js这样的文件,然后通过<script src="/path/to/browserified.js">将其包含在HTML中。

由于新的Sails应用程序使用Grunt为您组织并将<script>标记注入到您的视图中,因此对于如何使用Browserify或Webpack来使用Sails,可能会有点令人困惑。对于Sails 1.0,使用Webpack而不是Grunt的seed project。对于Sails v0.12.x,您必须在Google周围找到一些使用Broswerify或Webpack with Sails的示例。

短期解决方案,从长远来看可能无法维护,是将minified vue-js-slider component的内容保存到资源文件夹中(例如assets/js/vue-slider-component.js),将其添加到HTML使用<script src="/js/vue-slider-component.js">并在代码中将其作为window['vue-slider-component']访问。