Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将bower组件与sails.js连接?_Javascript_Dependency Management_Bower_Sails.js - Fatal编程技术网

Javascript 如何将bower组件与sails.js连接?

Javascript 如何将bower组件与sails.js连接?,javascript,dependency-management,bower,sails.js,Javascript,Dependency Management,Bower,Sails.js,我希望能够通过bower安装Javascript依赖项,并在应用程序中使用它们,但我想不出一种方法,只需将粘贴文件从bower\u components文件夹复制到Sails资产文件夹 /* * Create a file called .bowerrc and put the following in it. * This file should be in the root directory of the sails app. */ { "directory": "asse

我希望能够通过bower安装Javascript依赖项,并在应用程序中使用它们,但我想不出一种方法,只需将粘贴文件从
bower\u components
文件夹复制到Sails资产文件夹

/*
 * Create a file called .bowerrc and put the following in it.
 * This file should be in the root directory of the sails app.
 */

 {
   "directory": "assets/linker/bower_components"
 }

理想情况下,我想我应该使用
requirejs
并指向
main.js
文件中的bower组件。我可能想把一个方形的钉子钉在一个圆孔里,如果是的话,请告诉我。欢迎使用Sails管理
组件/库的任何想法。

注意:以下答案与当前版本的SailsJS不再完全相关,因为自SailsJS 0.10起,不支持链接器文件夹

见:

原始答案:

我找到了一个解决方案,其实很简单。我没有意识到您可以配置bower将其文件放在何处

创建一个.bowerrc文件并更改安装bower组件的目录,如果是Sailjs,则应将其放入assets文件夹中

/*
 * Create a file called .bowerrc and put the following in it.
 * This file should be in the root directory of the sails app.
 */

 {
   "directory": "assets/linker/bower_components"
 }
然后,只要文件发生更改,Sails就会使用grunt将它们复制到.tmp/public/assets文件夹中。如果您不希望sails不断地删除这些文件,然后重新对它们进行复制,那么可以将它们排除在grunt文件中

/* 
 * This is not necessary, but if you have a lot of components and don't want
 * them constantly being deleted and copied at every file change you can update
 * your Gruntfile.js with the below.
 */

 clean: {
   dev: ['.tmp/public/**',
         '!.tmp/public',
         '!.tmp/public/bower_components/**'],
   build: ['www']
 },
关于将requirejs与sail一起使用的一个技巧。默认情况下,您将从socket.io文件中得到一个错误,因为sails将在不使用requirejs的情况下加载它。这将抛出一个错误,因为socket.io支持amd样式加载,更多详细信息请参见此处

解决此问题的最简单方法是注释掉socket.io.js末尾附近的行

/*
 * Comment the below out in the file assets/js/socket.io.js, if using requirejs
 * and you don't want to modify the default sails setup or socket.io.
 */

 if (typeof define === "function" && define.amd) {
   define([], function () { return io; });
 }
另一种方法是将assets/js中名为“socket.io.js”、“sails.io.js”和app.js的sails文件重新编码为amd模块。

很抱歉我迟到了

我认为在linker中包含bower_组件是个坏主意,因为当你扬帆时,其中的所有内容都会被复制到.tmp和include-in标记中。 例如,如果您使用bower包含Angular,那么脚本中将包含两个内容:一个用于Angular.js,另一个用于Angular.min.js。两者兼而有之是错误的

以下是我的项目解决方案:

  • 我已在根目录中创建了一个文件夹bower_组件
  • 我已经在copy:dev中的数组文件的Gruntfile.js中添加了这一行

    {.tmp/public/linker/js/angular.js':'./bower_components/angular/angular.js'}


对于我想要包含的每个文件,我需要在这个数组中手动添加一个新行。我还没有找到另一个自动解决方案。如果有人找到更好的解决方案……;)

在Sails 0.10中,“assets/linker”目录不再存在,但是我发现了一个简单解决方案的线索,该解决方案使bower->asset linker工作流实现了一定程度的自动化,同时还允许对最终链接的内容进行精确控制

解决方案是添加到Sails.jscompileasets任务中

grunt.registerTask('compileAssets', [
    'clean:dev',
    'bower:dev',
    'jst:dev',
    'less:dev',
    'copy:dev',
    'coffee:dev'
]);
然后像这样配置grunt bower任务(如tasks/config/bower.js):

这将自动将您的bower js和css文件复制到适当的位置,以便Sail的资产链接器查找并自动添加到项目的布局模板中。任何其他js或css文件仍将自动添加到您的bower文件之后

然而,这仍然不是一个灵丹妙药,因为此设置有两大警告:

1-通过bower grunt添加的文件必须在bower.json的main数组中列出。如果您看到未加载预期的文件,则必须编辑该packages bower.json文件或通过grunt bower的packagesspecific选项手动添加依赖项


2-资产链接器中bower文件的顺序目前按字母顺序排列。到目前为止,我唯一能调整这种顺序的方法是在Sail的编译集任务的其余部分之前,再进行一个额外的grunt任务,手动重新排序文件。不过这一次我相信grunt bower可以做些什么。

连接帆船和bower的方法不止一种

通过自定义生成器集成Bower的SailsJS包存在于此处:


也有一种方法可供吞咽。

我发现实现这一点的最简单方法就是将单个Bower组件添加到您的
任务/pipeline.js
文件中。例如,以下是添加Modernizer的方法:

//要按顺序注入的客户端javascript文件
//(使用Grunt样式的通配符/glob/splat表达式)
变量jsFilesToInject=[
//在加载sails.io之前,先加载其他内容
'js/dependencies/sails.io.js',
//这里引入了jQuery或Angular之类的依赖项
'js/dependencies/***.js',
// =========================================================
//现代化:
'bower_components/Modernizer/Modernizer.js',
// =========================================================
//所有其他客户端js文件
//不会按特定顺序在这里注射。
“js/***.js”
];

指向
bower\u components/modernizer/modernizer.js
的链接会插入布局模板中的
占位符中,它也会缩小,等等。当您运行
sails lift--prod

来管理脚本的顺序时,只需在
var jsFilesToInject=[]处编辑
tasks/pipeline.js
在grunt bower的版本
0.15.1
之前,它一直工作得很好。有些东西发生了变化,阻止了bower_组件被复制。我认为现在必须修复它,因为从今天起,grunt bower 0.16.0对我起作用。这里强烈建议不要使用仅链接的答案,因为链接将来可能会失效。我建议你用你引用的资料编辑你的答案。这个答案现在是