kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 phpheini
phpheini
Question

Cum pentru a include script-uri situate în interiorul node_modules folder?

Am si eu o intrebare privind cele mai bune practici pentru includerea node_modules într-un site HTML.

Imaginați-am Bootstrap în interiorul meu node_modules folder. Acum pentru versiunea de producție a site-ului, cum aș include Bootstrap script și CSS fișiere situat în interiorul node_modules folder? Are sens să plece Bootstrap în interiorul acel folder și de a face ceva, cum ar fi următoarele?

<script src="./node_modules/bootstrap/dist/bootstrap.min.js"></script>

Sau ar trebui să adăugați reguli pentru a-mi înghițitură de fișiere care apoi copiați aceste fișiere în folderul dist? Sau ar fi mai bine să înghită cumva elimina complet locală bootstrap din fișier HTML și înlocuiți-l cu CDN versiune?

254 2014-12-13T22:12:09+00:00 9
 Buldo
Buldo
Întrebarea editată 25 octombrie 2019 в 3:51
Programare
node.js
node-modules
twitter-bootstrap
npm
Solution / Answer
 jfriend00
jfriend00
13 decembrie 2014 в 10:23
2014-12-13T22:23:13+00:00
Mai mult
Sursă
Editează
#26316465

De obicei, nu't vreau pentru a expune orice internă căi pentru modul în care server-ul dvs. este structurat în lumea de afară. Ce poți face cu un /script rută statică în server care preia fișierele sale din orice director se întâmplă să locuiască în. Deci, în cazul în care fișierele sunt în "./node_modules/bootstrap/dist/". Apoi, script-ul tag-ul în paginile dvs. arată ca aceasta:

<script src="/scripts/bootstrap.min.js"></script>

Dacă ați fost folosind express cu nodejs, o rută statică este la fel de simplu ca acest lucru:

app.use('/scripts', express.static(__dirname + '/node_modules/bootstrap/dist/'));

Apoi, orice browser cereri de la /scripts/xxx.js va fi automat preluat de la dist director la__dirname + /node_modules/bootstrap/dist/xxx.js`.

Notă: versiunile mai Noi de NPM pun mai multe lucruri la nivel de top, nu cuibărit atât de adânc, așa că, dacă utilizați o versiune mai nouă de NPM, atunci calea numele va fi diferit decât cel indicat în OP's de întrebare și de răspuns curent. Dar, conceptul este încă același. Vei afla în cazul în care fișierele sunt localizate fizic pe server conduce vehicule și de a face o aplicație.utilizarea()cuexpress.static()` pentru a face o pseudo-calea pentru aceste fișiere, astfel încât tu nu't expunerea efectivă server de fișiere de sistem organizației clientului.


Dacă tu nu't doresc să facă o rută statică place acest lucru, atunci're, probabil, mai bine doar copierea publice script-uri pentru a o cale care serverul web nu trata ca `/script-uri sau orice nivel de top denumire doriți să o utilizați. De obicei, puteți face acest lucru copierea parte de a construi/desfășurarea procesului.


Dacă doriți pentru a face doar un anumit fișier publice într-un director și nu tot ceea ce a găsit în acel director cu ea, atunci puteți crea manual rutele individuale pentru fiecare fișier, mai degrabă decât utiliza express.static (), cum ar fi:

<script src="/bootstrap.min.js"></script>

Și codul pentru a crea un traseu pentru care

app.get('/bootstrap.min.js', function(req, res) {
    res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');
});

Sau, daca vrei sa mai delimita trasee pentru script-uri cu /script, ai putea face acest lucru:

<script src="/scripts/bootstrap.min.js"></script>

Și codul pentru a crea un traseu pentru care

app.get('/scripts/bootstrap.min.js', function(req, res) {
    res.sendFile(__dirname + '/node_modules/bootstrap/dist/bootstrap.min.js');
});
 jfriend00
jfriend00
Răspuns editat 8 decembrie 2018 в 5:20
276
0
Alexander Egorov
Alexander Egorov
16 aprilie 2015 в 9:51
2015-04-16T09:51:12+00:00
Mai mult
Sursă
Editează
#26316473

Mi-ar folosi calea npm module și apoi face ceva de genul asta:

var path = require('path');
app.use('/scripts', express.static(path.join(__dirname, 'node_modules/bootstrap/dist')));
Victorio Berra
Victorio Berra
Răspuns editat 19 iunie 2015 в 6:56
17
0
Marcelo Lazaroni
Marcelo Lazaroni
13 mai 2016 в 4:51
2016-05-13T16:51:40+00:00
Mai mult
Sursă
Editează
#26316489

După cum sa menționat de către jfriend00 tu nu ar trebui să-ți expui server structura. Ai putea copia proiectului de dependență fișiere la ceva de genul publice/script-uri`. Puteți face acest lucru foarte rapid cu dep-linker astfel:

var DepLinker = require('dep-linker');
DepLinker.copyDependenciesTo('./public/scripts')
// Done
8
0
 Jake
Jake
27 octombrie 2015 в 8:56
2015-10-27T08:56:50+00:00
Mai mult
Sursă
Editează
#26316483

Directorul 'node_modules' nu poate fi în directorul curent, așa că ar trebui să soluționeze calea de dinamic.

var bootstrap_dir = require.resolve('bootstrap')
                           .match(/.*\/node_modules\/[^/]+\//)[0];
app.use('/scripts', express.static(bootstrap_dir + 'dist/'));
 Jake
Jake
Răspuns editat 18 martie 2016 в 7:51
6
0
 Jesse
Jesse
4 aprilie 2018 в 11:40
2018-04-04T11:40:21+00:00
Mai mult
Sursă
Editează
#26316512

Dacă doriți o soluție rapidă și ușoară (și ai înghițitură instalat).

În gulpfile.jseu conduc un simplu copy paste sarcina care pune orice fișiere s-ar putea nevoie de în./publice/modulele/` director.

gulp.task('modules', function() {
    sources = [
      './node_modules/prismjs/prism.js',
      './node_modules/prismjs/themes/prism-dark.css',
    ]
    gulp.src( sources ).pipe(gulp.dest('./public/modules/'));
});

gulp.task('copy-modules', ['modules']);

Dezavantajul la acest lucru este că e't automatizate. Cu toate acestea, dacă tot ce ai nevoie este de câteva scripturi și stiluri de copiat peste (și păstrate într-o listă), acest lucru ar trebui să facă treaba.

5
0
 curtwphillips
curtwphillips
12 iunie 2016 в 8:41
2016-06-12T08:41:48+00:00
Mai mult
Sursă
Editează
#26316495

Vreau sa fac update la această întrebare cu o soluție mai ușoară. Creați un link simbolic la node_modules.

Cel mai simplu mod de a acorda accesul public la node_modules este de a crea o legătură simbolică arătând spre node_modules din cadrul director public. Symlink-ul va face ca în cazul în care există fișiere oriunde link-ul este creat.

De exemplu, dacă nodul server are cod pentru a servi fișiere statice

app.use(serveStatic(path.join(__dirname, 'dist')));

și __dirname se referă la /path/to/app, astfel încât fișierele statice sunt servite la /path/to/app/dist

și node_modules este la /path/to/app/node_modules, apoi a crea o legătură simbolică ca asta de pe mac/linux:

ln -s /path/to/app/node_modules /path/to/app/dist/node_modules

sau ca asta de pe windows:

mklink /path/to/app/node_modules /path/to/app/dist/node_modules

Acum o cerere pentru:

node_modules/some/path 

va primi un răspuns cu dosarul la

/path/to/app/dist/node_modules/some/path 

care este de fapt fișierul de la

/path/to/app/node_modules/some/path

Dacă directorul de la /path/to/app/dist nu este un loc sigur, poate cauza interferențe de la un proces de a construi cu înghițitură sau mormăit, apoi ați putea adăuga un director separat pentru link-ul și se adaugă o nouă serveStatic apel, cum ar fi:

ln -s /path/to/app/node_modules /path/to/app/newDirectoryName/node_modules

și în nod se adaugă:

app.use(serveStatic(path.join(__dirname, 'newDirectoryName')));
 curtwphillips
curtwphillips
Răspuns editat 12 iunie 2016 в 8:47
3
0
 Timmmm
Timmmm
1 iulie 2017 в 5:40
2017-07-01T17:40:48+00:00
Mai mult
Sursă
Editează
#26316509

Am't găsi orice soluții curate (I nu't doriți să expuneți sursa tuturor mea node_modules) asa ca am scris un script Powershell pentru a le copia:

$deps = "leaflet", "leaflet-search", "material-components-web"

foreach ($dep in $deps) {
    Copy-Item "node_modules/$dep/dist" "static/$dep" -Recurse
}
3
0
 SuperNova
SuperNova
26 aprilie 2016 в 6:41
2016-04-26T06:41:27+00:00
Mai mult
Sursă
Editează
#26316487

Am făcut mai jos modificări la AUTO-INCLUD fișiere în index html. Așa că, atunci când adăugați un fișier în folderul acesta va fi automat preluat de la dosar, fără a fi nevoie pentru a include fișierul în index.html

//// THIS WORKS FOR ME 
///// in app.js or server.js

var app = express();

app.use("/", express.static(__dirname));
var fs = require("fs"),

function getFiles (dir, files_){
    files_ = files_ || [];
    var files = fs.readdirSync(dir);
    for (var i in files){
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()){
            getFiles(name, files_);
        } else {
            files_.push(name);
        }
    }
    return files_;
}
//// send the files in js folder as variable/array 
ejs = require('ejs');

res.render('index', {
    'something':'something'...........
    jsfiles: jsfiles,
});

///--------------------------------------------------

///////// in views/index.ejs --- the below code will list the files in index.ejs

<% for(var i=0; i < jsfiles.length; i++) { %>
   <script src="<%= jsfiles[i] %>"></script>
<% } %>
1
0
 Akash
Akash
16 aprilie 2019 в 4:53
2019-04-16T04:53:07+00:00
Mai mult
Sursă
Editează
#26316519

Aceasta este ceea ce am de configurare pe "express" server:

// app.js
const path = require('path');
const express = require('express');
const expressApp  = express();
const nm_dependencies = ['bootstrap', 'jquery', 'popper.js']; // keep adding required node_modules to this array.
nm_dependencies.forEach(dep => {
  expressApp.use(`/${dep}`, express.static(path.resolve(`node_modules/${dep}`)));
});
<!-- somewhere inside head tag -->
<link rel="stylesheet" href="bootstrap/dist/css/bootstrap.css" />

<!-- somewhere near ending body tag -->
<script src="jquery/dist/jquery.js" charset="utf-8"></script>
<script src="popper.js/dist/popper.js" charset="utf-8"></script>
<script src="bootstrap/dist/js/bootstrap.js" charset="utf-8"></script>

Noroc...

0
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
工藤 芳則
Înregistrat 6 zile în urmă
2
Ирина Беляева
Înregistrat 1 săptămână în urmă
3
Darya Arsenyeva
Înregistrat 1 săptămână în urmă
4
anyta nuam-nuam (LapuSiK)
Înregistrat 1 săptămână în urmă
5
Shuhratjon Imomkulov
Înregistrat 1 săptămână în urmă
DE
ES
ID
JA
KO
PT
RO
RU
TR
ZH
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire