J'ai du mal à utiliser webpack au lieu de Codekit v1.9.3. J'ai commencé à travailler pour passer de CodeKit à Grunt et Gulp, puis j'ai découvert webpack
, ce qui semble très cool. Je n'arrive tout simplement pas à le faire fonctionner correctement.
javascript
avec la syntaxe coffeescript
bootstrap-sass
(Scss) selon les besoins$brand-primary
webpack --watch
Pour compiler automatiquement les scripts et les styles lorsqu'ils sont modifiésRessources Bower:
Je les stocke actuellement dans le monde, en dehors du projet:
~/bower_components/twbs-bootstrap-sass/vendor/assets/stylesheets
Parce que CodeKit prend en charge la boussole, je l'ai dans mon fichier config.rb
:
add_import_path "~/bower_components/twbs-bootstrap-sass/vendor/assets/stylesheets"
Structure du projet
js/fancybox.js
js/main.js <-- currently the compiled js 'output' file
js/main.coffee
css/styles.css <-- currently the compiled css 'output' file
scss/styles.scss
scss/modules/_bootstrap-customizations.scss
scss/modules/_typography.scss
scss/partials/_header.scss
scss/partials/_footer.scss
Contenu de styles.scss
@import "modules/bootstrap-customizations"; # local customizations
@import "bootstrap/variables";
@import "bootstrap/mixins";
... # load bootstrap files as required
@import "bootstrap/wells";
le noeud a été installé avec brew install node
de homebrew et semble fonctionner correctement sinon.
J'ai lu ces pages:
J'ai tenté de créer un fichier webpack.config.js
Plusieurs fois, ma dernière tentative en était plusieurs versions:
module.exports = {
entry: [
"./node_modules/bootstrap-sass-webpack!./bootstrap-sass.config.js",
"./js/main.coffee"
],
output: {
path: __dirname,
filename: "main.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style!css" }
]
}
};
Erreur Webpack
Lorsque j'exécute webpack
j'obtiens ceci:
ERROR in ./~/bootstrap-sass-webpack/~/css-loader!/Users/cwd/~/sass-loader!./~/bootstrap-sass-webpack/bootstrap-sass-styles.loader.js!./bootstrap-sass.config.js
stdin:1: file to import not found or unreadable: "~bootstrap-sass/assets/stylesheets/bootstrap/variables
Erreur NPM
J'obtiens une erreur lors de la tentative de npm install bootstrap-sass
Et je n'ai pas eu de chance lors de la recherche d'une solution. Je ne suis même pas sûr d'avoir besoin de ce module.
npm ERR! Darwin 13.4.0
npm ERR! argv "node" "/usr/local/bin/npm" "install" "bootstrap-sass"
npm ERR! node v0.10.32
npm ERR! npm v2.1.7
npm ERR! code EPEERINVALID
npm ERR! peerinvalid The package bootstrap-sass does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer [email protected] wants bootstrap-sass@~3.2.0
npm ERR! Please include the following file with any support request:
npm ERR! /Users/cwd/webpack-test/npm-debug.log
Les parties les plus déroutantes de webpack pour moi sont:
require("bootstrap-sass-webpack")
- est-ce dans le fichier webpack.config.js
Ou dans le fichier js/main.js
?npm install
?npm install webpack -g
Pour que le webpack soit installé globalement, et utiliser npm install
Sans le -g
Pour les autres modules. Cependant, je ne vois aucun dossier node_modules
En cours de création dans mon projet. Ne devrait-il pas y en avoir un?require("bootstrap-sass-webpack")
?Quels modules de nœud dois-je installer pour pouvoir le faire? Et à quoi devrait ressembler mon webpack.config.js
?
Webpack est principalement un bundle JavaScript. Son langage "natif" est JavaScript et toutes les autres sources nécessitent un chargeur qui le transforme en JavaScript. Si vous require()
un fichier html par exemple ...
var template = require("./some-template.html");
... vous aurez besoin du html-loader . Ça tourne...
<div>
<img src="./assets/img.png">
</div>
...dans...
module.exports = "<div>\n <img src=\"" + require("./assets/img.png") + "\">\n</div>";
Si un chargeur ne renvoie pas JavaScript, il doit être "canalisé" vers un autre chargeur.
Pour utiliser SASS, vous aurez besoin d'au moins sass-loader et css-loader . Le chargeur css renvoie une chaîne JavaScript. Si vous souhaitez importer la chaîne JavaScript renvoyée sous la forme StyleSheet , vous aurez également besoin de style-loader .
Exécutez npm i sass-loader css-loader style-loader --save
Vous devez maintenant appliquer ces chargeurs sur tous les fichiers qui correspondent à /\.scss$/
:
// webpack.config.js
...
module: {
loaders: [
// the loaders will be applied from right to left
{ test: /\.scss$/, loader: "style!css!sass" }
]
}
...
Vous pouvez également passer des options à node-sass comme paramètres de requête:
{
test: /\.scss$/, loader: "style!css!sass?includePaths[]=" +
path.resolve(__dirname, "./bower_components/bootstrap-sass/assets/stylesheets/"
}
Puisque bootstrap fait référence aux icônes via l'instruction url()
, le chargeur css essaiera d'inclure ces actifs dans le bundle et lèvera une exception dans le cas contraire. C'est pourquoi vous aurez également besoin de chargeur de fichiers :
// webpack.config.js
...
module: {
loaders: [
{ test: /\.scss$/, loader: "style!css!sass" },
{ test: /\.jpe?g$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$/, loader: "file" },
]
}
...
Pour inclure bootstrap dans votre bundle, il y a plusieurs façons. L'une est via l'option à entrées multiples comme vous l'avez déjà essayé. Je recommande d'utiliser une seule entrée où vous require()
votre fichier sass principal:
// main.js
require("./main.scss");
Étant donné que vos includePaths
sont configurés, vous pouvez faire:
// main.scss
// Set the font path so that url() points to the actual file
$icon-font-path: "../../../fonts/bootstrap";
@import "bootstrap";
Veuillez noter que les instructions d'importation dans les fichiers scss ne sont pas touchées par webpack car libsass n'a pas d'api ( encore ) pour fournir des résolveurs personnalisés.
Pour éviter la duplication de code, il est également important d'avoir un seul fichier sass principal, car webpack compile chaque fichier sass individuellement.
Avec le chargeur de café installé via npm, votre webpack.config.js
Final devrait ressembler à:
module.exports = {
entry: "./js/main.coffee",
output: {
path: __dirname,
filename: "main.js"
},
module: {
loaders: [
{ test: /\.scss$/, loader: "style!css!sass" },
{ test: /\.jpe?g$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$/, loader: "file" },
{ test: /\.coffee$/, loader: "coffee" }
]
}
};
Il est préférable de ne pas installer le webpack globalement, car c'est une dépendance de votre projet et doit donc être contrôlé via npm. Vous pouvez utiliser la section scripts - de votre package.json
:
{
...
"scripts": {
"start": "webpack --config path/to/webpack.config.js & node server.js"
}
}
Ensuite, il vous suffit d'exécuter npm start