¿Cómo cambiar la carpeta de componentes predeterminada de bower?

475

Estoy haciendo un nuevo proyecto que usa bower de twitter. Creé un component.jsonpara mantener toda mi dependencia como jquery. Luego ejecuto bower installque instala todo en una carpeta llamada components. Pero necesito instalar los componentes en una carpeta diferente, por ejemplo public/components.

He intentado editar mis components.json en:

{
  "name": "test",
  "version": "1.0.0",
  "directory": "public/",
  "dependencies": {
    "jquery": "*"
  }
}

o:

{
  "name": "test",
  "version": "1.0.0",
  "componentsDirectory": "public/",
  "dependencies": {
    "jquery": "*"
  }
}

como se muestra en https://github.com/twitter/bower/pull/94 pero no funciona.

Adam Ramadhan
fuente

Respuestas:

930

Cree un archivo de configuración de Bower.bowerrc en la raíz del proyecto (a diferencia de su directorio de inicio) con el contenido:

{
  "directory" : "public/components"
}

Corre de bower installnuevo.

Adam Ramadhan
fuente
44
Solo puedo ver el registro de cambios The value of the json property from .bowerrc is no longer usedy supongo que todo está bien con la "directory"propiedad. ¿Derecha? github.com/bower/bower/blob/master/CHANGELOG.md
Sergey Kishenin
11
Esto no funciona para mi. Funciona en .bowerrc, pero no en bower.json. Esto parece una característica tan básica ...
elliottregan
148
Tengo curiosidad por saber por qué esto no se pondría en el archivo bower.json. Especialmente si es una configuración por proyecto de todos modos.
Hayden
8
Según los documentos, tiene que estar en .bowerrc, no en bower.json. Extraño ... bower.io/#custom-install-directory
joemfb
20
En Windows, para crear un archivo que comience con ".", Simplemente cree el archivo con un "." Al final. En otras palabras, simplemente llámelo ".bowerrc".
PeteK68
76

Además de editar .bowerrcpara configurar su ruta de instalación predeterminada, también puede configurar rutas de instalación personalizadas para diferentes tipos de archivos.

Hay un paquete de nodos llamado bower-installer que proporciona un solo comando para administrar rutas de instalación alternativas.

correr npm install -g bower-installer

Configura tu bower.json

{
  "name" : "test",
  "version": "0.1",
  "dependencies" : {
    "jquery-ui" : "latest"
  },
  "install" : {
    "path" : {
      "css": "src/css",
      "js": "src/js"
    },
    "sources" : {
      "jquery-ui" : [
        "components/jquery-ui/ui/jquery-ui.custom.js",
        "components/jquery-ui/themes/start/jquery-ui.css"
      ]
    }
  }
}

Ejecute el siguiente comando: bower-installer

Esto se instalará components/jquery-ui/themes/start/jquery-ui.cssen ./src/css, etc.

lfender6445
fuente
44
Esto parece prometedor, pero el bower_componentsdirectorio aún se crea y se completa. :(
Ben
¿Qué versión de bower?
lfender6445
Parece ser la naturaleza del paquete. puede abrir un problema aquí github.com/blittle/bower-installer/issues o escribir un script bash para eliminar el directorio posterior a la instalación.
lfender6445
1
Creo que no tiene sentido. No quiero un paquete que todavía descargue el repositorio completo de git y las dependencias y luego simplemente copie los archivos específicos para mí ... Puedo presionar Ctrl + C yo mismo. Esperaba que solo descargara archivos específicos para mí.
Alendorff
si te escucho en este caso solo soy un .bowerrc y señalo public / bower o public / vendor para mantener el proyecto simple.
lfender6445
61

Tuve el mismo problema en mi Windows 10. Esto es lo que solucionó mi problema

  1. Eliminar bower_componentsen su carpeta raíz
  2. Crea un .bowerrcarchivo en la raíz
  3. En el archivo escribe este código {"directory" : "public/bower_components"}
  4. Ejecutar un bower install

Debería ver la carpeta bower_components en su carpeta pública ahora

Tim Anishere
fuente
23

Algo que vale la pena mencionar ...

Como se señaló anteriormente por otros colaboradores, utilizando un .bowerrcarchivo con el JSON

{ "directory": "some/path" }

es necesario. SIN EMBARGO, puede encontrarse con un problema en Windows al crear ese archivo. Si Windows le da un mensaje implicándole que agregue un " nombre de archivo ", simplemente use un editor de texto / IDE como Notepad ++.

Agregue el JSON a un archivo sin nombre, guárdelo como .bowerrc : ¡listo!

Probablemente sea una suposición fácil, pero espero que esto ahorre a otros el dolor de cabeza innecesario :)

Cody
fuente
18
En Windows, para crear un archivo que comience con ".", Simplemente cree el archivo con un "." Al final. En otras palabras, simplemente llámelo ".bowerrc".
PeteK68
también puedes hacerlo con git bash, simplemente escribe:echo >> .bowerrc
Leandro RR
7

Intente colocar el components.jsonarchivo en el publicdirectorio de su aplicación, en lugar del directorio raíz, luego vuelva a ejecutarlo bower install... intente esto en el directorio de inicio de su aplicación:

cp components.json public
cd public
bower install
hagope
fuente
1
Sí, eso puede ser una forma, ¿hay una forma legítima de hacerlo? pero todavía contaré esto como una respuesta.
Adam Ramadhan
2
podría escribir un script bash bower.shpara anteponer el directorio en el que desea instalar, como 'public-components.json' y luego generaría los comandos anteriores ...
hagope
2
Ambas respuestas suenan súper hacky, definitivamente no deseables
Jay
-3

Hola, soy el mismo problema y lo resuelvo de esta manera.

El usuario de Windows y vs no pueden crear el archivo .bowerrc.

en cmd ir a cualquier carpeta

instale cualquier paquete que contenga el archivo .bowerrc por ejemplo

bower install angular-local-storage

Este complemento contiene el archivo .bowerrc. copia eso y ve a tu proyecto y pega este archivo.

y en visual studio - explorador de soluciones - muestre todos los archivos e incluya el archivo .bowerrc visto del proyecto

lo resuelvo de esta manera :)

Abdullah SARGIN
fuente
puede usar Cygwino Cmderterminal para crear el .bowerrcarchivo.
Francis.TM
44
Simplemente cree el archivo con cualquier nombre, luego abra un PowerShell o símbolo del sistema y cámbiele el nombre.
TrueWill
Puede crear un archivo de puntos en Windows especificando el nombre del archivo como '.name'. - Todavía no mucha gente sabe esto después de tantos años de estar disponible :)
Alex Paven