115 votes

Comment importer moment.js avec le manuscrit?

J'essaie d'apprendre à la Machine. Bien que je ne pense pas que c'est pertinent, je suis en utilisant VSCode pour cette démo.

J'ai un package.json que ces pièces sont de:

{
  "devDependencies": {
    "gulp": "^3.9.1",
    "jspm": "^0.16.33",
    "typescript": "^1.8.10"
  },
  "jspm": {
    "moment": "npm:moment@^2.12.0"
  }
}

Ensuite, j'ai un fichier d'enregistrement de la classe main.js comme ceci:

import moment from 'moment';
export class Main {
}

Mon gulpfile.js ressemble à ceci:

var gulp = require('gulp');
var typescript = require('gulp-tsb');
var compilerOptions = {
                        "rootDir": "src/",
                        "sourceMap": true,
                        "target": "es5",
                        "module": "amd",
                        "declaration": false,
                        "noImplicitAny": false,
                        "noResolve": true,
                        "removeComments": true,
                        "noLib": false,
                        "emitDecoratorMetadata": true,
                        "experimentalDecorators": true
                      };
var typescriptCompiler = typescript.create(compilerOptions);
gulp.task('build', function() {
  return gulp.src('/src')
    .pipe(typescriptCompiler())
    .pipe(gulp.dest('/dest'));
});

Quand je lance gulp construire, je reçois le message: "../main.ts(1,25): Cannot file module 'moment'."

Si j'utilise import moment = require('moment'); alors jspm de travail et apporter dans le module quand je lance l'application, mais je suis encore à la réception de l'erreur. J'ai aussi essayé:

npm install typings -g
typings install moment --ambient --save

Au lieu de faire mieux le problème cependant, c'était pire. Maintenant, je reçois l'erreur ci-dessus sur la compilation ainsi que les suivants: "../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."

Si je vais dans le fichier fourni par typings et ajouter à la fin du fichier:

declare module "moment" { export = moment; }

Je peux obtenir la deuxième erreur de s'en aller, mais j'ai encore besoin de l'exiger pour obtenir moment pour travailler dans mon main.ts le fichier et je suis encore en train de la première construction d'erreur.

Dois-je créer mon propre .d.ts le fichier pour le moment, ou est-il simplement une certaine configuration morceau, je suis absent?

143voto

Aides Points 1875

Mise à jour

Apparemment moment offre désormais à ses propres définitions de type (selon sivabudh au moins à partir de 2.14.1 vers le haut), vous n'avez donc pas besoin d' typings ou @types .

import * as moment from moment doit charger les définitions de type de fourni avec le package npm.

Cela dit cependant, comme il est dit dans le moment/pull/3319#issuecomment-263752265 le moment, l'équipe semble avoir quelques problèmes dans le maintien de ces définitions (ils sont toujours à la recherche de quelqu'un qui les maintient).


Vous devez installer moment typings sans l' --ambient drapeau.

Puis l'inclure à l'aide de import * as moment from 'moment'

72voto

Koby Points 191

Vous avez besoin d'importer moment() la fonction et le Moment de la classe séparément dans TS.

J'ai trouvé une note dans le texte dactylographié docs ici.

/*~ Noter que ES6 modules ne peuvent pas exporter directement appelable fonctions. *~ Ce fichier doit être importé à l'aide de la CommonJS-style: *~ importation x = require('someLibrary');

Donc le code pour importer moment js dans tapuscrit en fait ressemble à ceci:

import { Moment } from 'moment'
....
let moment = require('moment');
...
interface SomeTime {
  aMoment: Moment,
}
...
fn() {
  ...
  someTime.aMoment = moment(...);
  ...
}

21voto

NSjonas Points 1457

Vous ne savez pas quand cela a changé, mais avec la dernière version du manuscrit, il vous suffit d'utiliser import moment from 'moment'; et tout le reste devrait fonctionner normalement.

16voto

ShaChris23 Points 7713

via typings

Moment.js supporte maintenant les caractères d'imprimerie dans la v2.14.1.

Voir: https://github.com/moment/moment/pull/3280


Directement

Peut-être pas la meilleure réponse, mais ce est la force brute, et ça fonctionne pour moi.

  1. Il suffit de télécharger le réel moment.js le fichier et l'inclure dans votre projet.
  2. Par exemple, mon projet ressemble à ceci:

$ tree . ├── main.js ├── main.js.map ├── main.ts └── moment.js

  1. Et voici un exemple de code source:

``

import * as moment from 'moment';

class HelloWorld {
    public hello(input:string):string {
        if (input === '') {
            return "Hello, World!";
        }
        else {
            return "Hello, " + input + "!";
        }
    }
}

let h = new HelloWorld();
console.log(moment().format('YYYY-MM-DD HH:mm:ss'));
  1. Suffit d'utiliser node pour exécuter main.js.

5voto

hardy lutula Points 1

1. moment d'installation

 npm install moment --save
 

2. testez ce code dans votre fichier dactylographié

 import moment = require('moment');

console.log(moment().format('LLLL'));
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X